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

时间:2014-03-22 18:32:36

标签: ios objective-c nskeyedarchiver nskeyedunarchiver

我有一个对象“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”中存档的对象。

如何取消归档在单独的视图控制器中存档的对象?

3 个答案:

答案 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对象