NSUserDefault中的NSMutableArray

时间:2013-04-25 14:03:35

标签: nsmutablearray nsuserdefaults

我的桌子有问题!

我使用解析表视图,但是当我更改视图时,我的表会丢失数据。所以我决定将所有数据保存到nsuserdefault;但是,这里的问题,NSUserDefault警告我: “请注意,属性列表中的字典和数组也必须只包含属性值。”

注意:itemsToDisplay是一个NSMutableArray,包含titleedItems的标题,网址,数据和摘要。

好吧,这是我的代码:

self.itemsToDisplay = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"items"] mutableCopy];

if (!self.itemsToDisplay) {
    self.itemsToDisplay = [[NSMutableArray alloc] init];
}

self.itemsToDisplay = [[NSMutableArray alloc]init];

self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors:
                       [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date"
                                                                             ascending:NO] autorelease]]];


[[NSUserDefaults standardUserDefaults] setObject:self.itemsToDisplay forKey:@"items"];
[[NSUserDefaults standardUserDefaults] synchronize];

我认为问题是 setObject:self.itemsToDisplay ,但我不知道如何解决它。

谢谢你们..

2 个答案:

答案 0 :(得分:1)

首先请注意,表格不会丢失数据,因为它不包含任何用户数据。数据通过绑定或通过委派提供,请参阅Apples文档中的NSTableViewDataSource

其次,self.itemsToDisplay的前三个任务没有用处(除非你在setter中有副作用)因为它们都被最后一个赋值所覆盖。

最后,如果此代码已在委托中,则应在NIB文件中实例化委托,以使数据在视图交换之后继续存在。如果你的委托是一个用你的视图实例化的对象,那么它也会随着它一起死掉所有数据并且写入用户默认值对于你想要实现的目标是一个坏主意。只需将委托设置为一个生命周期大于两个视图的对象。

答案 1 :(得分:0)

self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors:
                       [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date"
                                                                             ascending:NO] autorelease]]];

//First lets encode it
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:self.itemsToDisplay];
[userDefault setObject:myEncodedObject forKey:[NSString stringWithFormat:@"sample"]];