2013-04-25 38 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"]];