2010-11-30 82 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中)