无法将阵列保存到NSUserDefaults

时间:2013-08-07 20:14:35

标签: nsuserdefaults

这是我第一次尝试使用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。我只是在尝试。

1 个答案:

答案 0 :(得分:0)

来自Apple文档:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSUserDefaults

  

默认对象必须是属性列表,即(或   对于集合的实例组合):NSData,NSString,   NSNumber,NSDate,NSArray或NSDictionary。如果你想存储任何   在其他类型的对象中,通常应将其存档以创建   NSData的实例。

如果allContactsNSArray,请在setObject:forKey:来电中使用该NSMutableArray。如果是[allContacts copy],请使用:

{{1}}

获取数组的不可变副本。