IOS/Objective-C: 将自定义数组保存为 NSUserDefault
IOS/Objective-C: Save Custom Array as NSUserDefault
我试图将对象数组保存到 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
您必须在取回数据时先取消存档。您正在直接访问数据。这行不通。您可以采用与归档数据类似的方式来做到这一点
NSData *dataObj = [currentDefaults objectForKey:@"myItems"];
Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj];
更多参考,可以考虑这个answer.
希望这对您有所帮助。
谢谢!
如其他答案所述,这是因为您的数组不符合 NSDictionary 类型(字符串、二进制、布尔等)。您的数组成员属于自定义类型,因此无法保存。您需要做的是先将数组转换为二进制,然后保存。
你的取值方式有误
您可以通过以下代码获取数组:
项目 *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] objectForKey:@"myItems"] mutableCopy];
我试图将对象数组保存到 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
您必须在取回数据时先取消存档。您正在直接访问数据。这行不通。您可以采用与归档数据类似的方式来做到这一点
NSData *dataObj = [currentDefaults objectForKey:@"myItems"];
Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj];
更多参考,可以考虑这个answer.
希望这对您有所帮助。 谢谢!
如其他答案所述,这是因为您的数组不符合 NSDictionary 类型(字符串、二进制、布尔等)。您的数组成员属于自定义类型,因此无法保存。您需要做的是先将数组转换为二进制,然后保存。
你的取值方式有误
您可以通过以下代码获取数组:
项目 *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] objectForKey:@"myItems"] mutableCopy];