2009-11-23 77 views
0

這真的很尷尬,但我堅持了兩個小時的試驗和錯誤。在其他方法中使用NSString?

NSString *testString; 

然後我犯了一個屬性和合成它:

我在界面作爲聲明一個NSString。我將它分配在viewDidLoad中:

testString = [[NSString alloc] initWithFormat:@"thats my value: %i", row]; 

如果我想在另一個方法中獲得字符串的值,它總是返回(null)。 所以字符串是空的,但爲什麼?我如何讓它可以訪問一個類中的每個函數?所以,我不想做一個全局變量只是一個

這真的很令人困惑的「全局變量的類中」,因爲只要我的代碼,我從來沒有碰到了這個問題:(

感謝了很多幫助!我

回答

3

在你的界面,財產申報:

@property (nonatomic, readwrite, retain) NSString *testString; 

在實現中,合成它:

@synthesize testString; 

在實現中,添加一個釋放到-dealloc方法:

[self.testString release]; 

-viewDidLoad,訪問屬性:

self.testString = [[[NSString alloc] initWithFormat:@"that's my value: %i", row] autorelease]; 
0

我個人使用

self.testString = [NSString stringWithFormat:@"my value: %i",row]; 

這樣,你不要不需要擔心釋放它。

還要確保你總是使用「自我」。

+0

謝謝! 如果我想要在viewcontroller1中聲明一個nsstring並想在viewcontroller中使用它,那該怎麼辦? 我採取了與appDelegate.viewcontroller1的方式。testString,但返回也是(null):( – user134282 2009-11-23 10:17:53

+0

你的appDelegate或viewController爲空嗎? – Chris 2009-11-23 10:39:01

+0

我該如何測試? – user134282 2009-11-23 10:46:28

0

你可以嘗試在viewDidLoad中保留你的字符串。但如果它會爲你工作,不要忘記再發布一次

0

所有其他答案有你直接或間接retain ing testString。但是,由於您獲得了testString,其中包含allocinit,它已由您擁有,無需再次登錄retain

我在想你的問題與其他事情有關。您要麼以某種方式過早釋放testString,要麼在您嘗試使用其他方法訪問您的testString時未調用您的viewDidLoad

爲了讓您使用在您的實施中定義的變量,您不必聲明它爲@property@synthesize它。這些可以幫助,但你不必擁有它們。如果這個問題沒有消失,你可能需要向我們展示更多的代碼。