2013-04-25 43 views
0

我的桌子有问题!NSUserDefault中的NSMutableArray

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

注意:itemsToDisplay是一个NSMutableArray,包含标题,url,数据和parsedItems摘要。

嗯,这里我的代码:

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,但我不知道如何解决它。

谢谢你们..

回答

1

首先让提的是,表不能丢失数据,因为它不包含任何用户数据。数据通过绑定或通过授权提供,参见Apples文档中的NSTableViewDataSource)。其次,self.itemsToDisplay的前三个赋值没有任何用处(除非在setter中有副作用),因为它们都被最后一个赋值覆盖。

最后,如果此代码已经存在于委托中,那么委托应该在您的NIB文件中实例化,以便数据在视图交换过后继续存在。如果你的委托是一个用你的视图实例化的对象,它也将随着它与所有的数据一起消失,并写入用户 - 默认值对于你想要达到的目标来说是一个坏主意。只需将委托设置为一个对象的生存期大于两个视图的对象。

+0

问题解决:D – arcangel06 2013-04-26 06:47:48

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"]];