2012-03-09 2 views
0

사용자가 UITableView에서 행을 삭제하려고 할 때 내 애플리케이션이 중단되고 디버거에서 SIGABRT 오류가 발생합니다.tableView에서 행을 삭제하려고 할 때 SIGABRT 오류로 앱이 다운 됨

- (void) tableView:(UITableView *)tableView 
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
    [[self displayedObjects] removeObjectAtIndex:[indexPath row]]; 


    // Animate deletion 
    NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
    [[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationFade]; 
    //[[self tableView] deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]]; 
    } 
} 
+0

displayObjects에서 객체보다 먼저 행을 삭제 해보십시오. –

+0

당신의 문제가 무엇인지 압니다. 나는 대답을 게시 할 것이다 – JTApps

+0

Raphael Ayres 고맙다. 나는 당신의 생각을 시도했다. 그러나 그것은 효과가 없었다. – Ali

답변

0

내가 또 다른 질문에 도움을 얻었다. 그리고 문제는 개체가 배열에서 삭제되지만 테이블보기에서 행을 삭제하기 전에 numberOfRowsInSection이 다시 호출되어 디스크에서 배열을 다시로드하고 내 문제로 인해 삭제 전에 번호를 제공한다는 것입니다. 배열의로드. numberOfRowsInSection에 중단 점을 넣었습니다. 이제는 모두 명확합니다.

0

[self displayedObjects]의 항목 수를 커버 [indexPath row]합니까 : 여기

은 삭제 내 코드? 예를 들어 [self displayedObjects]에는 5 개의 항목 만 있지만 removeObjectAtIndex:6을 원합니다.

+0

예. 나는 올바른 객체를 올바르게 삭제하는 displayedObject 배열을 볼 수 있습니다. 그것은 단지 내 애플 리케이션이 충돌 테이블보기 행을 삭제하려고 할 때. – Ali

0

내가 어디에서 잘못되었는지보기 위해 내 코드와 비교했다.

 //Removes From Table 
    [favorites removeObjectAtIndex:indexPath.row]; 
    [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 

즐겨 찾기가 내 배열입니다. 내가 당신이해야 할 겁니다 생각하면이 라인을 변경할 수 있습니다 :

[[self displayedObjects] removeObjectAtIndex:[indexPath row]]; 

먼저,이 직전에 그 라인을 넣어 :

[[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationFade]; 

그리고 배열의 이름으로 self 변경 테이블이 표시됩니다.

또한!

테이블이 표시되어 있는지 확인 배열을 확인 매우 중요 변경 값을 (추가 또는 삭제) 할 수 없습니다하는 NSMutableArray 아닌있는 NSArray와 NSArray

입니다. 당신이 NSArray

+0

당신이 말하는 것은 Raphael Ayres가 그의 코멘트에서 위에 말한 것입니다 : tableview가 데이터를 가져 오는 배열에서 객체를 제거하기 전에 tableview 행을 삭제하려고 시도하는 것입니다. 나는 그것을 시도했지만 여전히 충돌합니다. – Ali

+0

배열을 변경할 수 있는지 확인 했습니까? – JTApps

+0

예. 그것은 바뀔 수 있습니다.그건 그렇고 난 그것을 serialize하고 NSArray를 NSMutableArray 사본을 만드는 NSArray를 제공하는 그것을 unserializing거야. 나는 이것이 어떤 문제도 일으키지 않기를 바란다. 한 개체를 제대로 삭제하는 배열을 참조하십시오. 행 삭제에 문제가 있다고 생각합니다. – Ali

0

표시되지 않았는지 내가 잘못 아니에요 경우 그러나, NSMutableArray 당신은, 그래서 당신은이 코드를 호출하고, 만들 수 있습니다

[[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationFade]; 

을 헌신적 삭제 이벤트 내에서. "tableView : commitEditingStyle : forRowAtIndexPath :"메서드에서 백업 스토어를 업데이트해야한다고 생각합니다. 삭제가 이미 커밋되었습니다. 나중에 테이블 뷰를 새로 고침해야 테이블 뷰를 업데이트 허용으로 표시해야합니다.

이 모든 코드를 주석 시도하고 어떻게되는지 알려 :

// Animate deletion 
NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
[[self tableView] deleteRowsAtIndexPaths:indexPaths 
         withRowAnimation:UITableViewRowAnimationFade]; 
+0

나의 후원 점을 업데이트하는 것에 관해서, 나는 그것이 내가하고있는 것이라고 생각한다. 나는이 행에서 displayObjects라는 배열을 업데이트하고있다 :'[[self displayedObjects] removeObjectAtIndex : [indexPath row]];'그리고 배열에서 올바른 객체를 적절히 삭제하려고한다. 나는 행 삭제를 제안하고 주석을 달았습니다. 앱이 중단되지는 않지만 다른보기로 이동하여 변경 사항을보기 위해 돌아올 때까지 행을 삭제하지 않습니다. 나는 테이블을 다시로드하기 위해 묶었지만 그것도 도움이되지 못했습니다. 이 줄이 충돌을 일으키는 것이지만 어떻게하면 테이블 행을 삭제할 수 있습니까? – Ali

관련 문제