我试图将一组对象保存到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
答案 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];