2010-04-07 5 views
2

객관적인 C 및 iPhone 프로그래밍에 익숙합니다. 이 코드를 실행할 때 셀이 채워지지 않는 이유를 알 수없는 것 같습니다. xml 내용이 콘솔 로그에 표시되고 xcode는 오류를 표시하지 않습니다. 어떤 도움을 줄 수 있습니까?UITableView : NSMutableArray가 테이블에 나타나지 않습니다.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if(![elementName compare:@"Goal"]) { 
     tempElement = [[xmlGoal alloc] init]; 
    } else if (![elementName compare:@"Title"]) { 
     currentAttribute = [NSMutableString string]; 
    } else if (![elementName compare:@"Progress"]) { 
     currentAttribute = [NSMutableString string]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if (![elementName compare:@"Goal"]) { 
     [xmlElementObjects addObject:tempElement]; 
    } else if (![elementName compare:@"Title"]) { 
     NSLog(@"The Title of this event is %@", currentAttribute); 
     [tempElement setTitled:currentAttribute]; 
    } else if (![elementName compare:@"Progress"]) { 
     NSLog(@"The Progress of this event is %@", currentAttribute); 
     [tempElement setProgressed:currentAttribute]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if (self.currentAttribute) { 
     [self.currentAttribute appendString:string]; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [xmlElementObjects count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [mtableview dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    // Set up the cell... 
    cell.textLabel.text = [xmlElementObjects objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

} 

답변

1

나는이 코드를 실행할 때 세포가 기입하지 않습니다 이유를 알아낼 수 없습니다.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [xmlElementObjects count]; 
} 

이 방법은 타격을 받고 있습니까? 그렇다면 xmlElementObjects nil입니까? 그렇지 않은 경우 배열에 요소가 없으므로 0을 반환합니까? 그렇다면 XML 구문 분석 코드가 배열을 사용하기 전에 배열을 채우지 않았기 때문입니까?

0

확인해야 할 또 다른 사항 : tableview의 dataSource 속성을 올바른 개체로 설정 했습니까? 당신의 if(![elementName compare:@"Goal"]) 정말 (중 NSLog() ING 또는 거기에 중단 점을 넣어 '히트'경우 그 외에는,

. 또 다른 메모를 확인하고 관련이없는, 당신은 아마 xmlElements 사전에 추가 한 후 tempElement을 해제해야합니다.

-tableView:numberOfRowsInSection:-tableView:cellForRowAtIndexPath:에서
0

중단 점을 설정은이 호출되고 있다는 것을 보장하기는 Alfons가 언급 한 바와 같이, 그것은 당신의 테이블 뷰의 datasource 속성이 설정되지 않는 것이있을 수 있습니다

일부 관련이없는 사항 :..

  1. 왜 비교 문인 ![someString compare:someOtherString]을 사용하고 있습니까? NSString에는 -isEqualToString: 메서드가 내장되어 있으므로이 문을 [someString isEqaulToString:someOtherString]으로 바꿀 수 있습니다. 결과는 변경되지 않지만 추가 된 가독성으로 인해 코드에 도움이됩니다. 여기에 (이 경우, mtableview) 인스턴스 변수를 계속 사용하는 경우이 문제가 발생할 수 있습니다

    UITableViewCell *cell = [mtableview 
              dequeueReusableCellWithIdentifier:CellIdentifier]; 
    

    : -tableView:cellForRowAtIndexPath:에서

  2. , 당신은 다음과 같은 코드가 있습니다. 이 메서드는 테이블 뷰를 인수로 사용하므로 tableView을 대신 사용하십시오. 그러면이 메서드를 호출 한 테이블 뷰에서 셀을 dequeue 할 수 있습니다.

  3. iPhone OS 3.0 이상을 개발하고 계십니까? 그렇다면, 라인

    [[UITableViewCell alloc] initWithFrame:CGRectZero 
             reuseIdentifier:CellIdentifier]; 
    

    [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:CellIdentifier]; 
    

    가 자연스럽게,하고 싶은 중 셀 스타일을 사용하여 교체해야합니다.

-1

목표 C는 매우 새로운 것입니다. 필자는 지금까지와 비교하여 매우 쉬운 것처럼 보이는 PHP를 작성하는 데 익숙합니다. 데이터 소스를 설정하고 isequaltostring과 비교하여 변경합니다. 콘솔 로그 상태는 다음과 같습니다.

2010-04-07 02:28:16.580 버킷리스트 [6449 : 20B] 이벤트 제목이 시험 1 10 %

2010-04-07 02 : 28 : 16.581 버킷리스트 [6449 : 20B 이러한 이벤트 제목 시험 2 20 %

2010-04-07 02 : 28 : 16.584리스트 [6449 : 20B] * - [xmlGoal isEqualToString :] : 28 : 미정 선택기 인스턴스 0x3d36600 2010-04-07 02 16.585 전송 목록 [6449 : 20b] * 'NSInvalidArgumentException'이라는 캐치되지 않은 예외로 인해 앱이 종료됩니다. '*** - [xmlGoal isEqualToString :] : 인스턴스로 전송 된 인식 할 수없는 선택기가 0x3d36600'

모든 도움에 감사드립니다!

+0

는 대답으로 자신의 질문에 회신하지 마십시오 (필자는 구문 분석 코드에서 제목 이름을 추측하고있어)보십시오. 대신 원래 게시물을 수정하십시오. –

0

xmlElementObjects은 문자열 배열이 아니며 사용자가 만든 일부 맞춤 클래스에 대한 인스턴스를 포함합니다 (가정). 따라서 cell.textLabel.text = [xmlElementObjects objectAtIndex:indexPath.row];이라고 말하면 NSString을 알 수없는 개체로 설정해야합니다.


cell.textLabel.text = [[xmlElementObjects objectAtIndex:indexPath.row] titled];

관련 문제