2011-04-24 5 views
0

두 개의 서로 다른 테이블 뷰가 있습니다.이 테이블 뷰에서 tableView:MoveRowAtIndexPath:ToIndexPath:에있는 동일한 코드를 사용하여 행의 사용자 순서 재 지정을 지원합니다. 이러한 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

아무런 차이가 없으므로 걱정됩니다. 다른 표보기간에 혼합이 일어나지 않지만 하나의 표보기에서 행 사이에서 - 수동으로 행을 이동 한 후 갑자기 행을 두드리는 것은 맨 위 행을 두드리는 것과 같습니다. –

관련 문제