2013-01-15 197 views
0

我有一個問題,在本地存儲中爲包含NSString列表的NSMutableArray存儲數據。 我有一個保存方法和一個get方法都應用程序運行時似乎工作。但是,一旦我關閉了應用程序並重新啓動數組中的項目就消失了。無法從NSUserDefaults中檢索NSMutableArray

NSMutableArray*ImageTags; 

獲取數據

-(NSMutableArray*)GetDataNSMutableArray:(NSString*)ItemName 
{ 
    NSMutableArray *GetData = [[NSMutableArray alloc] init]; 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:ItemName]; 
    if (dataRepresentingSavedArray != nil) 
    { 
     NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray]; 
     if (oldSavedArray != nil) 
      GetData = [[NSMutableArray alloc] initWithArray:oldSavedArray]; 
     else 
      GetData = [[NSMutableArray alloc] init]; 
    } 
    return GetData; 
} 

保存數據

-(void)SaveDataNSMutableArray:(NSString*)ItemName:(NSMutableArray*)Data 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:Data] forKey:ItemName]; 

} 

如何添加項目

[ImageTags addObject:Control.titleLabel.text] 

如何數組保存

[super SaveDataNSMutableArray:CVC_ImageURL:ImageTags]; 

陣列如何檢索

ImageTags = [super GetDataNSMutableArray:CVC_ImageURL]; 
+0

可可編碼約定將在方法名和變量名的開始喜歡小寫字符。大寫字符開始類名稱。 'NSMutableArray * getData'和' - (void)saveDataNSMutableArray ...'等... – ikuramedia

+0

檢查我的其他..從這裏回答.. http://stackoverflow.com/a/14258828/1702413 – TonyMkenu

回答

1

總是NSUserDefaults的返回不可變的情況下。

無關: (約定表示methodNames應始終以小寫字母開頭)。

1
[[NSUserDefaults standardUserDefaults] synchronize] 

要轉儲從所有NSUserDefaults的內容到持久性存儲

+0

我不知道如何這有助於我存儲一個NSMutable數組的問題。也許我失去了一些東西,但無論如何,我嘗試過,結果相同。 – CodeMilian

+1

- [NSUserDefaults synchronize]只會幫助你,如果你的應用程序正在終止。這不是一個解決方案 - 所有的用戶默認問題。 –

1

你不能可變數組存儲用戶的默認值。存儲不可變的副本並檢索並轉換爲可變的副本,以便在下次啓動期間進行訪問。

0

你可以做同步,同時節省:

-(void)SaveDataNSMutableArray:(NSString*)ItemName:(NSMutableArray*)Data 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:Data] forKey:ItemName]; 

[[NSUserDefaults standardUserDefaults] synchronize] //add this code of a line. 

} 
+0

這沒有什麼區別,但謝謝:-) – CodeMilian