2013-07-09 42 views
0

我有一個設置頁面,其中有一個帶有複選標記的長列表。用戶可以根據需要選擇任意數量的行,並將它們保存在NSUserDefaults中。我希望自己先前的選擇來選擇他們下次打開設置時間,所以我已經試過這樣:每次在viewdidload上選擇保存的選中行

NSArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"choices"]]; 

if (array.count !=0) { 
    NSLog(@"not empt"); 
    for (id obj in array) { 
     NSIndexPath *path = [NSIndexPath indexPathWithIndex:obj]; 
     [self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionTop]; 
    } 

} 

但應用程序崩潰與此錯誤:

erminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible. 

我在做什麼錯?謝謝

回答

0

錯誤是相當說明性的。 UIKit中的NSIndexPaths需要兩個索引一個用於該部分,一個用於該行。這是explained here

假設你只需要在你的表視圖中的一個部分:

for (id obj in array) { 
    NSIndexPath *path = [NSIndexPath indexPathForRow:obj inSection:0]; 
    [self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionTop]; 
} 
+0

現在得到這個 - [UITableView的_contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]:對於部分(0)行(204883856)超出範圍(10)。 「 – centree