2014-07-11 33 views
0

我有一個將數據添加到NSMutableArray的問題。我有一個tableView,我將單元格文本存儲在一個NSMutableArray中。 tableView是用戶填充的,這意味着用戶輸入他們想要放在tableView上(爲了製作列表等)。我遇到的問題是存儲他們輸入的數據。這裏是我的保存代碼:Xcode NSMutableArray沒有填充來自NSUserDefaults的數據

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:self.tasks forKey:@"tasksArray"]; 
[defaults synchronize]; 

變量「tasks」是NSMutableArray。上面的代碼恰好在用戶按下鍵盤上的完成按鈕並且鍵盤文本被添加到「任務」NSMutableArray之後。這裏似乎沒有任何問題,因爲我已經調試過並發現一切正常保存。

以我viewDidLoad中:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSArray *array = [[NSArray alloc] initWithArray:[defaults objectForKey:@"tasksArray"]]; 

if ([self.tasks count] == 0) { 

    NSLog(@"Array is 0"); 
    self.tasks = [[NSMutableArray alloc] init]; 
} 

else { 

    NSLog(@"Array is > 0"); 
    self.tasks = [[NSMutable array] alloc] initWithArray:[defaults objectForKey:@"tasksArray"]]; 
} 

現在上面的代碼是我要被加載到其中填充的tableView陣列中的數據。我得到的錯誤是一個NSRangeException,索引0超出了空數組的邊界。該問題似乎與NSMutableArray「任務」,並試圖用保存的數據填充它。我的目標是如果用戶以前輸入過任何數據,那麼將「tasks」數組填充NSUserDefaults中存儲在關鍵「tasksArray」下的數據。如果沒有,並且tableView應該是空的,那麼我想創建「tasks」數組。

如果對我的代碼有什麼問題給出任何幫助,或者提供一種獲得幫助很大的結果的不同方法。謝謝!

回答

0

爲什麼你使用這些If else條件。只需使用

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if(!self.tasks) 
    self.tasks = [[NSMutableArray alloc] initWithArray:[defaults objectForKey:@"tasksArray"]]; 
else 
    [self.tasks addObjectsFromArray:[defaults objectForKey:@"tasksArray"]]; 

現在,您可以將檢查,在那裏你想

if([self.tasks count]){ 
} 
else{ 
} 
+0

是啊,同樣的問題。出於某種原因,NSMutableArray不想採用NSUserDefaults數據。錯誤是索引0超出了空數組的範圍。所以它一定意味着數據永遠不會傳遞給NSMutableArray。 –

0

objectForKey返回的通用對象。你知道它是一個數組,但是NSMutableArray並不認識它。二者必選其一:

self.tasks = [[NSMutableArray alloc] initWithArray:[defaults arrayForKey:@"tasksArray"]]; 

self.tasks = [[NSMutableArray alloc] initWithArray:(NSArray *)[defaults objectForKey:@"tasksArray"]];