2014-02-06 103 views
1

我有一個我想存儲字符串的類。這個類是一個控制器。現在我想從bController中存儲一個字符串,並在cController中存儲NSLog字符串。當我嘗試這種情況時,cController中的日誌輸出始終爲空。任何幫助將非常感激。跨類共享屬性變量

aController.h:

@interface aController : NSObject 

@property (nonatomic, retain) NSString * testingProperty; 

aController.m:

#import "aController.h" 

@implementation aController 

@synthesize testingProperty = _testingProperty; 

bController.m:

#import "bController.h" 
#import "aController.h" 

@implementation bController 

-(void)didSomething 
{ 
    aController* aTest = [[aController alloc] init]; 
    aTest.testingProperty = @"Test String"; 
} 

cController.m

#import "cController.h" 
#import "aController.h" 

@implementation cController 

-(void)didSomethingElse 
{ 
    aController* bTest = [[aController alloc] init]; 
    NSLog(@"%@",bTest.testingProperty); //output is: (null) 
} 
+0

意味着'bController didSomething'永遠不會被調用。在那裏放一個日誌語句來驗證它是否被調用 –

回答

1

這是因爲你的財產是由一個實例變量支持的,所以如果你分配一個新的實例它的零。如果你需要這樣做,你有幾個選擇。 1,你可以創建一個singelton。 2,你可以聲明一個類(+)方法或兩個可以設置和返回你的字符串的靜態變量支持的方法。可能有更多的方法來做到這一點,但也許最簡單的將是這裏列出的第二個。

編輯:

爲了您的具體問題的應用程序委託將永遠是相同的實例只是把財產在你的應用程序delegate.h文件,當您運行的方法分配給它,你得到的字符串。然後你可以得到這樣的字符串:

YourAppDelegateClass *appDelegate = (YourAppDelegateClass *)[[UIApplication sharedApplication] delegate]; 
NSString *string = appDelegate.yourProperty; 
+0

爲什麼我不需要這樣做?假設我在AppDelegate類中運行「didRegisterForRemoteNotificationsWithDeviceToken:」,並且該方法的輸出是設備令牌。如果我想使用該設備令牌字符串讓我們說視圖控制器或任何其他類...什麼是實現這一目標的最佳實踐解決方案? – rjm226

+0

作爲編輯發佈您的問題的答案。希望能幫助到你。 –