[ios] dequeueReusableCellWithIdentifier : forIndexPath에서 어설 션 실패 :

그래서 저는 학교에서 RSS 리더를 만들고 코드를 완성했습니다. 테스트를 실행했는데 오류가 발생했습니다. 참조하는 코드는 다음과 같습니다.

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                     forIndexPath:indexPath];
    if (cell == nil) {

        cell = 
         [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  
                                reuseIdentifier:CellIdentifier];

    }

출력의 오류는 다음과 같습니다.

2012-10-04 20 : 13 : 05.356 Reader [4390 : c07] *-[UITableView dequeueReusableCellWithIdentifier : forIndexPath :], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460의 어설 션 실패 13 : 05.357 Reader [4390 : c07] * 포착되지 않은 예외 ‘NSInternalInconsistencyException’으로 인해 앱을 종료하는 이유 : ‘식별자 셀이있는 셀을 큐에서 빼낼 수 없음-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드에서 프로토 타입 셀을 연결해야합니다. ‘
* 먼저 던져 호출 스택 : (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935 ) libc ++ abi.dylib : 예외가 발생하여 종료 호출

오류 화면에 표시되는 코드는 다음과 같습니다.

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

도와주세요!



답변

dequeueReusableCellWithIdentifier:forIndexPath:방법을 사용하고 있습니다. 문서 그 방법이 말한다 :

중요 사항 : 이 메소드를 호출하기 전에 registerNib:forCellReuseIdentifier:or registerClass:forCellReuseIdentifier:메소드를 사용하여 클래스 또는 nib 파일을 등록해야합니다 .

재사용 식별자에 펜촉 또는 클래스를 등록하지 않았습니다 "Cell".

코드를 보면 dequeue 메소드가 nil셀을 제공하지 않으면 리턴 메소드가 리턴 될 것으로 예상 됩니다. dequeueReusableCellWithIdentifier:해당 동작을 위해 를 사용해야합니다 .

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

공지 사항 것을 dequeueReusableCellWithIdentifier:dequeueReusableCellWithIdentifier:forIndexPath:다른 방법이 있습니다. 전자후자 doc을 참조하십시오 .

당신은 당신이 이제까지 사용 싶어 이유를 이해하려면 dequeueReusableCellWithIdentifier:forIndexPath:, 이 Q & A를 확인 .


답변

이 오류는 식별자에 펜촉 또는 클래스를 등록하는 것과 관련이 있다고 생각합니다.

tableView : cellForRowAtIndexPath 함수에서 수행중인 작업을 유지하고 viewDidLoad에 아래 코드를 추가하십시오.

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

그것은 나를 위해 일했다. 그것이 도움이되기를 바랍니다.


답변

이 질문은 상당히 오래되었지만 다른 가능성이 있습니다. 스토리 보드를 사용하는 경우 스토리 보드에서 CellIdentifier를 설정하기 만하면됩니다.

CellIdentifier가 “Cell”인 경우 “Identifier”특성을 설정하십시오.
여기에 이미지 설명을 입력하십시오

그렇게 한 후에 빌드를 청소하십시오. XCode는 때때로 스토리 보드 업데이트에 문제가 있습니다


답변

나는 같은 문제로 교체했다

static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if (cell==nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    }

해결


답변

UITableViewCell스토리 보드에서 사용자 정의를 구성 하지만 스토리 보드를 사용하여 UITableViewController이것을 사용 하는 인스턴스를 인스턴스화하지 않기 때문에 문제가 발생했을 가능성이 큽니다 UITableViewCell. 예를 들어, MainStoryboard에, 당신은이 UITableViewController라는 서브 클래스 MyTableViewController및 사용자 정의 동적있다 UITableViewCell라는 MyTableViewCell식별자 ID가 “MyCell”로한다.

다음 UITableViewController과 같이 사용자 정의를 작성하는 경우 :

 MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];

사용자 정의 테이블 뷰셀을 자동으로 등록하지 않습니다. 수동으로 등록해야합니다.

그러나 스토리 보드를 사용하여 인스턴스화하는 경우 다음 MyTableViewController과 같이하십시오.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyTableViewController *myTableViewController = [storyboard  instantiateViewControllerWithIdentifier:@"MyTableViewController"];

좋은 일이 일어난다! UITableViewController스토리 보드에서 정의한 사용자 정의 테이블 뷰 셀을 자동으로 등록합니다.

델리게이트 메소드 “cellForRowAtIndexPath”에서 다음과 같이 테이블 뷰 셀을 작성할 수 있습니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

//Configure your cell here ...

return cell;
}

재활용 대기열에 재사용 가능한 셀이 없으면 dequeueReusableCellWithIdentifier가 자동으로 새 셀을 만듭니다.

그런 다음 끝났습니다!


답변

Xcode 4.5 에는 dequeueReusableCellWithIdentifier:forIndexPath:
기본 템플릿 코드에 새로운 기능이 포함되어 있다고 덧붙일 것 입니다. 개발자는 이전 dequeueReusableCellWithIdentifier:방법을 기대할 수 있습니다.


답변

스토리 보드에서 프로토 타입 셀의 ‘식별자’를 CellReuseIdentifier “셀”과 동일하게 설정해야합니다. 그런 다음 해당 메시지를 얻지 못하거나 해당 registerClass : 함수를 호출해야합니다.