IOS / Objective-C:将自定义数组保存为NSUserDefault

时间:2017-09-25 23:13:47

标签: ios nsarray nsuserdefaults

我试图将一组对象保存到NSUserDefault中但没有成功。当我在尝试之前注销数组时,它充满了对象。但是,当我尝试注销NSUserDefault时,它为NULL。任何人都可以看到我可能做错了什么?感谢您的任何建议:

 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

3 个答案:

答案 0 :(得分:1)

您必须在检索时首先取消归档数据。您正在直接访问数据。这不行。您可以按照与归档数据类似的方式执行此操作

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

Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj];

有关详情,请参阅此answer.

希望这会有所帮助。 谢谢!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您的访问值方法错误。

您可以使用以下代码获取数组:

Items * myRetrievedItems = [[[NSUserDefaults standardUserDefaults] objectForKey:@“myItems”] mutableCopy];