2010-11-30 78 views
3

所以我有一個用戶名保存在UserDefaults。出於某種原因,我正在經歷一些奇怪的行爲。NSUserDefaults釋放的對象?

我有一個數據控制器,根據用戶名從服務器獲取一些數據。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

userID = [prefs stringForKey:@"username"]; 

這適用於前幾次,但我做了一些隨機的東西后,回去嘗試重新加載視圖,它崩潰。它說:

-[CFString retain]: message sent to deallocated instance 0x4b18ff0 

這很奇怪,因爲它在NSLog行停止。有沒有人看過這個或知道它爲什麼會發生?

回答

6

你如何定義你的用戶ID?如果它是一個保留的屬性屬性,你應該調用

self.userID = [prefs stringForKey:@"username"];

這樣你的字符串將被自動保留。從stringForKey返回的字符串是autoreleased。

+0

是的,這似乎是問題所在。它不再崩潰。嘆氣,看起來像是輕微的疏忽是讓我頭疼的東西。感謝納瓦的幫助。 :) – gabaum10 2010-11-30 20:08:50

+0

如果它有幫助,請將其標記爲正確答案。謝謝! – 2010-11-30 20:12:11

0

stringForKey返回一個你沒有保留的autorelease對象,它可能在該方法結束後立即釋放。

您需要通過手動或使用屬性聲明和retain設置來保留該字符串。

然後你需要在某個時候釋放它(至少在dealloc中)