2017-09-25 53 views
0

我想将一个对象数组保存为NSUserDefault,但没有成功。在尝试之前注销数组时,它充满了对象。但是,当我尝试注销NSUserDefault时,它是NULL。任何人都可以看到我可能做错了什么?感谢您的任何建议:IOS/Objective-C:将自定义阵列保存为NSUserDefault

Items *myItems = [mutableFetchedObjects mutableCopy]; 
    NSLog(@"my Items%@",myItems);//LOGS OUT LONG LIST OF ITEMS 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myItems]; 
    [currentDefaults setObject:data forKey:@"myItems"]; 
[currentDefaults synchronize]; 
    Items *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"myItems"] mutableCopy]; 
    NSLog(@"my Retrieved Items%@",myRetrievedItems); //LOGS OUT AS NULL 
+1

你为什么使用'arrayForKey'?您需要检索数据并将其解压缩 – Paulw11

+0

我不确定,但是即使它正在显示NULL,您仍在记录相同的对象? –

回答

1

正如提到的其他答案,这是因为你的数组不符合NSDictionary类型(字符串,二进制,布尔等)。您的数组成员是自定义类型,因此无法保存。你需要做的是将你的数组转换为二进制,然后保存。

1

您必须在取回数据时首先取消存档您的数据。您直接访问数据。这不起作用。你可以做类似的方式要存档的数据

NSData *dataObj = [currentDefaults objectForKey:@"myItems"]; 

Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj]; 

更多的参考,可以考虑一下这款answer.

希望这有助于。 谢谢!

+0

Got [Items initWithCoder:]:无法识别的选择器发送到实例 – user6631314

+1

@ user6631314,正如iGenio提到的,这可能是因为您的类不符合NSCoding协议。你可以这样做:https://stackoverflow.com/a/6696735/3824808 –

0

您的访问值方法是错误的。

你可以在下面的代码数组:

项目* myRetrievedItems = [[[NSUserDefaults的standardUserDefaults] objectForKey:@ “myItems”] mutableCopy]。

相关问题