CellforseAtindexPath는 호출되지 않았다. 섹션은 1을 반환하고 행은 4를 반환합니다

StackOverflow https://stackoverflow.com/questions/1607915

문제

데이터 클래스에서 JSON 데이터를 구문 분석 한 후 UIViewController의 NSARRAY *헤드 라인 속성을 동일한 데이터 클래스의 FillArray 방법으로 설정했습니다. UIViewController의 ViewDidAppear 메소드에서 uitableView에서 ReloadData를 호출합니다. 숫자는 불을 피우고 반환하고 1을 반환 한 다음 NumberOfrowSection은 화재를 발사하고 4의 배열 수를 반환합니다 (배열의 4 개 줄에 대해). 그러나 Control은 CellforsionAtindexPath에 절대 도달하지 않으며 특히 유효한 섹션과 행이 있기 때문에 이유를 이해하는 데 가장 어려운 시간을 보내고 있습니다. 세포는 모두 보입니다.

UiviewDataSource 및 UitableViewDelegate 프로토콜을 UIViewController 인터페이스에 추가하고 UitableView의 대의원 및 데이터 소스를 ViewDidload에서 자체적으로 설정했습니다 (이는 행 및 섹션 카운트 메소드가 호출되는 섹션 수에 의해 확인됨).

속성을 설정하기 위해 Data.m의 UIViewController를 다시 구체화하는 것이 무엇인지 궁금합니다.

data.m :

- (void)fillArrays:(NSArray *)jsonObjs {
    NSLog(@"fillArrays");               
    HeadlinesRootViewController *hrvc = [[HeadlinesRootViewController alloc] init];
    hrvc.headlines = [self getJsonValuesForKey:@"headline" inArrayOfObjects:jsonObjs];
    [hrvc viewDidAppear:NO];
}

ViewController.m :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
    // Table view
    headlineTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 180, self.view.bounds.size.width, 300) style:UITableViewStylePlain];
    [headlineTableView setDelegate:self];
    [headlineTableView setDataSource:self];
    // Temporary
    self.headlines = [[NSMutableArray alloc] initWithObjects:@"headline1", @"headline2", @"headline3", @"headline4", nil];



    [self.view addSubview:headlineTableView];
    self.headlineTableView = headlineTableView;
    [headlineTableView release];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"viewdidappear");
    NSLog(@"headlines: %@", self.headlines); // Returns an array of 4 headlines
    if( [self.headlines count] != 0 ){
        [self.headlineTableView reloadData];
    }
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    NSLog(@"numberOfSectionsInTableView: 1");
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"numberOfRowsInSection: %d", [self.headlines count]);
    return [self.headlines count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"cellForRowAtIndexPath");
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.text = [[NSString alloc] initWithFormat:@"%@", [self.headlines objectAtIndex:indexPath.row]];

    return cell;
}
도움이 되었습니까?

해결책

FillArrays에서는 다른 View 컨트롤러를 만들지 만 IT 또는 그보기로 아무것도하지 않으면 그보기를 볼 수 없습니다. ViewDidAppear를 수동으로 호출하지는 않습니다. View Controllers View가 표시 될 때 자동으로 발생합니다 (탐색 컨트롤러의 맥락에서만).

일반적으로 흐름은 뷰 컨트롤러를 생성하고 해당 뷰를 현재보기의 하위 뷰로 추가하거나 탐색 컨트롤러를 통해 새 창으로 푸시하는 것입니다. 나는 당신의 전체 문제가 그들이 실제로 보는 사람이 실제로 보는보기에 추가되지 않았다는 것입니다. 따라서 테이블은 다른 방법을 호출하지만 레이아웃 서브 뷰 코드가 단순히 호출되지 않기 때문에 cellforry를 호출하지 않습니다.

다른 팁

당신은 당신을 추가 했습니까? tableView 의 견해에 UIViewController?

그것은 나에게 일어 났고 내가 이것을 추가했을 때

[self.view addSubview:table];
[table release];

그 다음에 cellForRowAtIndexPath 일을 시작했습니다.

Google을 위해 :

만약에 tableView:numberOfRowsInSection 어떤 이유로 든 0을 반환합니다 tableView:cellForRowAtIndexPath 호출 할 행이 없기 때문에 호출되지 않습니다.

TableView Delegate 및 DataSource가 ViewController를 가리키는지 확인하십시오.

나는 코드에 대한 잘못을 볼 수 없다. Cellforring에 도달하지 못한 브레이크 포인트로 확인 했습니까 (로그 명령문이 있음에도 불구하고)?

또한 Rowsection에서 "1"을 명시 적으로 반환하고 Cellforrow에서 반환하는 셀의 문자열을 하드 코드로 반환하기 위해 Wanity Check가 시도합니다.

다른 모든 것이 실패하면 Xcode 템플릿에서 새 테이블 뷰 컨트롤러를 작성하고 전화를 걸어서 작동 할 때 코드가없는 이유로 뒤로 작업하십시오.

또한 ViewDidload 설정 코드를 보는 것이 좋습니다 (위의 답변 추가).

ViewDidload에서 대의원 및 데이터 소스를 설정하는 경우 버그의 소스 일 수 있습니다. DataSource와 Delegate를 Init에서 설정할 수 있습니까?

UiviewController.view에 uitableview를 서브 뷰로 추가할지 확신 할 수 없습니다. 이것은 어쨌든 나의 접근 방식이었습니다.

이 접근법에서, 나는 UiviewController.view를 서브 뷰로 추가 한 후 뒷면에 uiviewcontroller.view를 보낼 때까지 Execution이 CellforyatindexPath에 들어 가지 않았다는 것을 알았습니다.

이것을 멀리하는 것은 문제의 일부일뿐입니다. 이 시점에서 다른 뷰 컨트롤러가 더 이상 터치 이벤트에 응답하지 않는 것 같습니다. rootViewController의 서브 뷰로 UitableView를 추가 할 때 모든 뷰가 적절한 터치 이벤트를 얻었음을 알았습니다.

PXL 감사합니다. uitable view 초기화를 ViewDidload에서 다음으로 이동할 때

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil"

UitableView가 내 UIView로 다시 삭제되는 행을 삭제하거나 업데이트 할 때 완벽하게 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top