0

这是我第一次尝试使用 NSUserDefaults。我已经阅读了 stackoverflow 中关于这个主题的所有问题和答案,但仍然无法让它发挥作用。我一定缺少一些基本的东西。数组 (allContacts) 仅包含一些姓名和电话号码。除非我误解发生了什么,否则这两个字段都是 NSStrings。还是它们只是指向字符串的指针?如果是这种情况,我将如何将它们转换为实际的 NSString?这是我保存数组的代码:

- (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。我只是在做实验。

4

1 回答 1

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]

获取数组的非可变副本。

于 2013-08-07T20:54:50.930 回答