2012-12-17 2 views
4

UITableView을 구현하는 iOS 6 기반 프로젝트가 있습니다. 표보기의 각 셀에는 UITextField이있어 사용자가 정보를 입력 할 수 있습니다. 사용자가 텍스트 필드를 지우거나 필드에서 모든 입력을 삭제하면 (예 : [textfield length] == 0) 다른 셀 (텍스트 필드)을 탭하면 테이블 뷰에서 이전 셀 (텍스트 필드)이 비어있어 삭제됩니다. 빈 셀이 테이블보기에 누적됩니다. 그러나사임을 거부 한 첫 번째 응답자가 포함 된 행을 삭제하려고 시도했습니다.

- (void)textFieldEditingDidEnd:(UITextField *)textField { 

    NSIndexPath *indexPath = // Index path of the row in the table view 

    if ([textField.text length] == 0) { 
     // Delete the cell from the table view 
     [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 

} 

코드는 콘솔에 다음과 같은 메시지 응용 프로그램 충돌을 해고 :

모든 텍스트 필드에 대한 UIControlEventEditingDidEnd 이벤트를 발생시킵니다 -textFieldEditingDidEnd:라는 방법을 사용하여 수행됩니다

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempt to delete row containing first responder that refused to resign'

내가 전에이 메시지를 본 적이 없다, 웹을 검색 할 때 특히 많은 참조가 될 것 같지 않습니다. 이 문제를 해결하는 방법에 대한 제안 사항에 감사드립니다.

+0

시도 퍼팅 [에 textField resignFirstResponder]; 행을 삭제하기 전에 해당 정보가 도움이되는지 확인하십시오. – Bergasms

+0

고마워,하지만 전에 시도. 안돼, 같은 문제 야. – Skoota

답변

11

전에는 그 메시지를 본 적이 없지만, 필자가 직접 느낀 점은 지연된 성능을 시도한 것입니다. 심지어이 같은 간단한 흥미로운 실험이 될 수 있습니다 여기

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] 
    withRowAnimation:UITableViewRowAnimationAutomatic]; 
}); 

내 생각,의 텍스트 필드는 여전히 (즉 textFieldEditingDidEnd가 여전히 실행되는 동안)에보고하는 동안 행을 삭제하려고하지 말자; 런 루프에 사이클을 마칠 기회를 주자.

+0

완벽하게 일했으며 의미가 있습니다. 당신의 도움을 주셔서 감사합니다! – Skoota

+0

쿨 - 오 - 라마! 그리고 내가 단지 추측하고 있었다라고 생각하기 위해 ...! 그러나 제 아이디어는 아무데도 완전히 나오지 않았습니다. autolayout은 추가 런 루프주기를 사용하므로 iOS 6에서 동일한 런 루프에서 벗어날 수있는 것에 대한 많은 부분이 변경되었습니다. 기본 아키텍처는 근본적으로 변경되었습니다. 그래서 저는 여러 상황에서 필요한 트릭을 찾고 있습니다. – matt

+0

@matt 오랜 시간이 걸렸지 만 마지막 줄에 닫기 괄호가 없습니다 ("}})") – vib

-1

나는 NSInternalInconsistencyException 예외와 마주 쳤습니다. 내 솔루션은 다음이었다

textView.selectedTextRange = nil; // clear the selected text 
[textView resignFirstResponder]; 
-1

키보드 숨기기 UIKeyboardWillHideNotification 통지에서 UITextView가 포함 된 UITableViewCell을 제거 할 때이 오류가 발생했습니다. 내 방법 textFieldShouldEndEditing 나는 또한 같은 문제가 발생 상황

-1

에 논리를 이동했다. "resignFirstResponer"및 "endEditing"을 호출 한 후에도 충돌이 발생합니다.

@ matt의 방법으로 시도해 보았지만 제대로 작동합니다. 고마워.

"deleteRowsAtIndexPaths :"를 GCD 대기열에 추가하는 중이므로 대기열에서 이전 작업이 대기열에서 완료되었는지 확인한 다음 main_queue에서 다음 작업 만 시작합니다. 따라서 지연을 추가 할 필요가 없습니다.

-1

에 NO 반환 때

수정 내가이 문제를 건너 온 UIKeyboardDidHideNotification

0

나는 또한 동일한 문제에 직면 해있다.키보드가 존재하는 동안은 내부

(void)textFieldDidEndEditing:(UITextField *)textField 

위임 실행 방법 이후 UITableview 다시로드 메소드를 호출 첫번째 resignFirstResponder를 호출해야합니다

(void)textFieldDidEndEditing:(UITextField *)textField{ 
    [tableview reloadData]; 
} 
1

내 충돌이 UICollectionViewCell의 내부 편집 가능한 UIWebView에서였다. (가)를 고정 다음 :

[self.view endEditing:YES]

관련 문제