如何在一个视图控制器中存档一个对象,然后在另一个视图控制器中取消存档



我有一个对象"School",它有一个可变数组属性"favoritesArray"和一个NSString属性"name"。

我有2个视图控制器"HomeViewController"one_answers"favoritstableviewcontroller"。

在我的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"];

然后在我的"favoritstableviewcontroller"中,我尝试解存档以前存档的"school"对象,这样我就可以访问"favoritesArray"。

当我的" favoritestleviewcontroller "中的按钮被点击时,这个方法被调用:

NSData *dataRetrieved=[[NSUserDefaults standardUserDefaults] objectForKey:@"schoolData"];
School *schoolTwo=[NSKeyedUnarchiver unarchiveObjectWithData:dataRetrieved];
NSLog(@"%lu", (unsigned long)schoolTwo.favoritesArray.count);

然而,它记录0,这意味着它没有解存档的对象,存档在"HomeViewController"

我如何解除归档的对象,归档在一个单独的视图控制器?

School必须实现NSCoding, NSKeyedArchiver才能序列化它

请参阅http://nshipster.com/nscoding/了解NSCoding和NSKeyedArchiver。

不管你做的是对的,我想你忘记初始化可变数组了。

self.school=[[School alloc]init];
self.school.favoritesArray = [NSMutableArray array];
[self.school.favoritesArray addObject:self.school.name];

在您的学校NSObject中,您已经实现了NSCoding协议,您是否对其中的每个对象进行了编码?这样做是必要的,因为您正在尝试存档School对象

最新更新