0

我有一个对象“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”中,我尝试取消归档以前归档的“学校”对象,以便访问“favoritesArray”。

当在我的“FavoritesTableViewController”中点击一个按钮时,这个方法被调用:

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

但是它记录 0 意味着它没有取消归档在“HomeViewController”中归档的对象。

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

4

3 回答 3

0

School必须实现NSCodingforNSKeyedArchiver才能对其进行序列化。

有关 NSCoding 和 NSKeyedArchiver 的详细介绍,请参阅http://nshipster.com/nscoding/

于 2014-03-22T18:37:06.987 回答
0

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

于 2014-03-22T19:56:38.433 回答
0

无论你做什么都是对的,我想你忘了初始化可变数组。

self.school=[[School alloc]init];
self.school.favoritesArray = [NSMutableArray array];
[self.school.favoritesArray addObject:self.school.name];
于 2014-03-22T19:36:23.593 回答