2011-04-24 32 views
0

我有兩個不同的表格視圖,我使用tableView:MoveRowAtIndexPath:ToIndexPath:中完全相同的代碼來支持用戶對行的重新排序。其中一個tableView可以很好地工作。然而,另一個混淆並開始顯示相同的子視圖,無論哪一行被選中 - 即其行索引似乎已被搞亂。爲什麼重新排序我的tableView搞亂了我的數據?

我已經通過在MoveRowAtIndexPath方法的末尾添加[tableView reloadData]來暫時解決此問題,但我不明白爲什麼它不起作用 - 尤其是因爲具有完全相同代碼的另一個視圖完美地工作。顯然,在這個視圖控制器中必須有另一種方法,它搞砸了,但我不知道在哪裏看。

下面是在兩個相同的代碼:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { 
    userDrivenDataModelChange = YES; 

    NSMutableArray *things = [[fetchedResultsController fetchedObjects] mutableCopy]; 
    NSManagedObject *thing = [[self fetchedResultsController] objectAtIndexPath:fromIndexPath]; 
    [things removeObject:thing]; 
    [things insertObject:thing atIndex:[toIndexPath row]]; 

    int i = 0; 
    for (NSManagedObject *mo in things) 
    { 
     [mo setValue:[NSNumber numberWithInt:i++] forKey:@"displayOrder"]; 
    } 

    [things release], things = nil; 

    [managedObjectContext save:nil]; 
    userDrivenDataModelChange = NO; 
} 

(對於它的價值,其工作方式之一是不一個的子視圖,以及他們在以 - 核心數據關係)。

回答

0

我忘記了我在父視圖中使用了一個自定義單元格,並且用戶在單元格內按下了一個UIButton,而不是單元格本身。自定義單元格將其索引路徑設置爲tableView:cellForRowAtIndexPath:的屬性,當移動表格單元格後,這些屬性當然不會再被調用。因此,我不得不添加[tableView reloadData]以確保單元格得到更新。

0

使用在

  • (的UITableViewCell *)dequeueReusableCellWithIdentifier不同的標識符爲每個tableviews:(的NSString *)標識

如果使用相同的標識字符串,它們將皮卡對方的緩存單元對象並顯示不一致的數據。

+0

沒有什麼區別,恐怕。在不同的表格視圖之間不會發生混淆,但是在一個表格視圖的行之間 - 在手動移動行之後,突然敲擊任何行與敲擊最上面一行相同。 – 2011-04-25 07:18:36

相關問題