2013-06-24 54 views
0

我的tableviewcontroller表現不正常。比方說,我添加2個對象:dogcatTableViewController未正確刪除單元格?

- dog 
- cat 

然後我刪除貓。

- dog 

然後我添加第三個(在這一點第二個)對象bird。細胞將填充cat而不是鳥。伯德最終沒有被保存在某個地方,我的名單結果是:

- dog 
- cat 

有誰知道這可能是這種行爲的原因是什麼?我沒有在代碼中尋找特定的錯誤,因爲代碼太多而無法顯示。我希望你們能知道我應該看看解決這個問題。如果你們想以任何方式查看我的一些代碼,請告訴我。謝謝。

編輯:所以我有控制檯打印出數組中的所有對象,只要有東西被刪除。對象正在被添加/刪除到數組中,所以看起來我的單元格沒有正確填充數據。

這裏是cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if(!cell){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
     Employee* tempEmployee = [[[EmployeeStore store] employees] objectAtIndex:indexPath.row]; 
     NSString* label = [NSString stringWithFormat:@"N. %@ P. %@", tempEmployee.name, tempEmployee.pin]; 
     [[cell textLabel] setText: label]; 
    } 
    return cell; 
} 

下面是我用它來刪除:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if(editingStyle == UITableViewCellEditingStyleDelete){ 
     NSMutableArray* employees = [[EmployeeStore store] employees]; 
     [[EmployeeStore store] removeEmployee:[employees objectAtIndex:indexPath.row]]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

這裏是我的EmployeeStore類removeEmployee:被稱爲在上述方法:

-(void) removeEmployee:(Employee*)e{ 
    [context deleteObject:e]; 
    [employees removeObject:e]; 
} 

編輯2:我的應用程序正在利用核心數據來保存表格條目。當我關閉應用程序並再次運行時,錯誤會自行修復(意味着它正確地從上下文加載)。如此這般從

- dog 
- cat 

的預期:

- dog 
- bird 

似乎是不正確的更新?

+0

請發佈刪除單元格並顯示單元格的代碼(cellForRowAtIndexPath方法)。 – Girish

回答

0

嘗試這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if(!cell){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 
    Employee* tempEmployee = [[[EmployeeStore store] employees] objectAtIndex:indexPath.row]; 
    NSString* label = [NSString stringWithFormat:@"N. %@ P. %@", tempEmployee.name, tempEmployee.pin]; 
    [[cell textLabel] setText: label]; 

    return cell; 
} 
+0

這解決了它。我現在看到它爲什麼這樣做。非常感謝。我感謝幫助! –

0

將下面的代碼,如果條件外cellForRowAtIndexPath方法

Employee* tempEmployee = [[[EmployeeStore store] employees] objectAtIndex:indexPath.row]; 
    NSString* label = [NSString stringWithFormat:@"N. %@ P. %@", tempEmployee.name, tempEmployee.pin]; 
    [[cell textLabel] setText: label]; 

簡單的錯誤在你的代碼:你只有在一個新cell設置cell文本被分配,而不是當cell被重用時。