我有一个对象“School”,其中包含一个可变数组属性“favoritesArray”和一个NSString属性“name”。
我有2个视图控制器“HomeViewController”和“FavoritesTableViewController”。
在我的HomeViewController中,当点击一个按钮时,会调用此方法:
self.school=[[School alloc]init];
[self.school.favoritesArray addObject:self.school.name];
NSData *schoolData=[NSKeyedArchiver archivedDataWithRootObject:self.school];
[[NSUserDefaults standardUserDefaults] setObject:schoolData forKey:@"schoolData"];
然后在我的“FavoritesTableViewController”中,我尝试取消归档以前存档的“school”对象,以便我可以访问“favoritesArray”。
在我的“FavoritesTableViewController”中点击按钮时,会调用此方法:
NSData *dataRetrieved=[[NSUserDefaults standardUserDefaults] objectForKey:@"schoolData"];
School *schoolTwo=[NSKeyedUnarchiver unarchiveObjectWithData:dataRetrieved];
NSLog(@"%lu", (unsigned long)schoolTwo.favoritesArray.count);
然而,它记录0意味着它没有取消归档在“HomeViewController”中存档的对象。
如何取消归档在单独的视图控制器中存档的对象?
答案 0 :(得分:0)
School
必须为NSCoding
实施NSKeyedArchiver
才能序列化它。
有关NSCoding和NSKeyedArchiver的详细介绍,请参阅http://nshipster.com/nscoding/。
答案 1 :(得分:0)
无论你做了什么都是对的,我想你忘了初始化可变数组。
self.school=[[School alloc]init];
self.school.favoritesArray = [NSMutableArray array];
[self.school.favoritesArray addObject:self.school.name];
答案 2 :(得分:0)
在您已实施NSObject
协议的学校NSCoding
中,您是否编码了其中的所有对象?这样做是必要的,因为你试图归档School
对象