这是我第一次尝试使用NSUserDefaults。我已经阅读过每一个问题&回答发表在stackoverflow关于这个主题,但仍然无法让它工作。我必须遗漏一些基本的东西。数组(allContacts)仅包含一些名称和电话号码。除非我误解了正在发生的事情,否则这两个领域都是NSStrings。或者他们只是字符串的指针?如果是这种情况,我将如何将它们转换为实际的NSStrings?这是保存数组的代码:
- (BOOL)saveChanges
{
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithArray:allContacts];
[[NSUserDefaults standardUserDefaults] setObject:mutableArray forKey:@"allContacts"];
[[NSUserDefaults standardUserDefaults] synchronize];
return 1;
}
这是我的日志:
2013-08-07 15:48:17.568 ImOK[5515:907] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
"Brad Pitt, 1-917-297-1234",
"Marilyn Monroe, 9179291234"
)' of class '__NSArrayM'. Note that dictionaries and arrays in property lists must also contain only property values.
提前感谢您的帮助。
此代码“for(id contact in allContacts){NSLog(@”%@“,[contact class]);}”给了我:
2013-08-07 17:11:30.845 ImOK[5569:907] Contacts
2013-08-07 17:11:30.854 ImOK[5569:907] Contacts
所以我猜他们不是有效的属性值。 顺便说一句,我没有明智的理由试图将数组保存为NSMutableArray。我只是在尝试。
答案 0 :(得分:0)
默认对象必须是属性列表,即(或 对于集合的实例组合):NSData,NSString, NSNumber,NSDate,NSArray或NSDictionary。如果你想存储任何 在其他类型的对象中,通常应将其存档以创建 NSData的实例。
如果allContacts
是NSArray
,请在setObject:forKey:
来电中使用该NSMutableArray
。如果是[allContacts copy]
,请使用:
{{1}}
获取数组的不可变副本。