在基于标签的应用中,当我在某些标签之间切换时,我有时会获得EXC_BAD_ACCESS
。这不是每一次,但如果你向前和向后轻弹几次,它最终会发生。
定义在.h:
NSUserDefaults *theData;
我在viewWillAppear和viewWillDisappear中有这个:
[theData synchronize];
在viewWillAppear阶段的函数中调用故障线:
NSMutableArray *thisArray = [theData objectForKey:@"FriendsArray"];
我正在使用NSUserDefaults来存储一些数据字典。这是由服务器调用填充的,但由于它经常刷新,因此不需要内部数据库。如果更好的话,我愿意接受存储这些数据的其他方式。
我尝试了许多内容,例如投放(NSMutableArray *)[theData objectForKey:@"FriendsArray"];
或使用arrayForKey
以及其他一些没有改进的事情。
非常感谢任何帮助或提示。
答案 0 :(得分:1)
NSMutableArray *thisArray = [theData objectForKey:@"FriendsArray"]; // retain
您尝试使数组可变的方式是错误的。也就像那样写的,正如评论中所建议的那样,你应该保留那个数组。
尝试使用以下对象初始化/分配新的可变数组:
NSMutableArray *thisArray =
[[NSMutableArray alloc] initWithArray:[theData objectForKey:@"FriendsArray"]];
另一种方法-(id)initWithArray:(NSArray *)array copyItems:(BOOL)flag;
允许您制作原始对象的副本。
答案 1 :(得分:0)
NSUserDefaults中的值不可变。您正在尝试将不可变对象转换为可变对象。尝试将其转换为NSArray,然后将其转换回可变数组。应该解决你的问题。
答案 2 :(得分:0)
使用
没有真正的理由NSUserDefaults *theData;
而是使用它来从UserDefaults恢复可变数组:
NSMutableArray *thisArray =
[[NSUserDefaults standardUserDefaults] objectForKey:@"FriendsArray"] mutableCopy];
这为您提供了RETAINED可变数组。
另请注意,您只需在保存到UserDefaults时使用同步,而不是在阅读时使用。您应该在每次保存后进行相同的同步,因为您的应用程序可能会崩溃或被iOS关闭,而您无需同步。