逻辑:从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"]];