iOS使用NSUserDefaults的小细节问题

逻辑:从NSUserDefaults中读出userList 若是userList中没有这个email则将当前email添加userList,而后保存userList到UserDefaults 代码以下: <!-- lang: cpp --> NSMutableArray *userList = [userDefaults objectForKey:@"userList"]; if(userList){ if(![userList containsObject:self.email]){ [userList addObject:self.email]; } }else{ userList = [NSMutableArray array]; [userList addObject:self.email]; } [userDefaults setObject:userList forKey:@"userList"]; [userDefaults synchronize];java

以上的问题其实与NSUserDefaults是没有太大的关系。与O-c的id类型有关,由于[userDefaults objectForKey:@"xxx"]返回的是id类型。 上面的代码跑起来大多数状况是正常的,出错的几率虽然比较小,但有时候会崩溃,错误信息以下安全

<!-- lang: java -->
2014-02-25 13:14:15.503 SAY[3725:70b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

错误出在这一行代码 <!-- lang: cpp --> [userList addObject:self.email];app

此时userList其实是NSArray的实例,虽然它被显示的声明为NSMutableArray*.code

安全的写法为it

<!-- lang: cpp -->
NSMutableArray *userList = [NSMutableArray arrayWithArray:[userDefaults objectForKey:@"userList"]];
相关文章
相关标签/搜索