2011-10-17 19 views
1

私は、ビューが読み込まれるときにテーブルビューの最初の行を選択するメソッドを呼び出しています。しかし、何らかの理由でselectFirstRowが呼び出された後、それはself.couldNotLoadData = NOに戻り、前後し続けます。なぜどんなアイデア?最初のif/elseループがelseに進むと、そのメソッドは呼び出されないので、ループを維持しません。UITableViewで無限ループが発生するのはなぜですか?

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (self.ichronoAppointments.count > 0) 
    { 
     self.couldNotLoadData = NO; 
     [self selectFirstRow]; 
     return self.ichronoAppointments.count; 
    } 
    else 
    { 
     self.couldNotLoadData = YES; 
     return 1; 
    } 
} 
-(void)selectFirstRow 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 
} 

答えて

1

これは未確認ですが、私はあなたがselectFirstRowからselectRowAtIndexPath:animated:scrollPosition:を呼び出すとき、それはUITableViewのデリゲートの-tableView:numberOfRowsInSection:を呼び出すことを賭けます。

基本的に無限の再帰が行われています。 tableView:numberOfRowsInSectionはを呼び出し、を呼び出し、tableView:numberOfRowsInSectionを無期限に呼び出します。

またはviewWillAppearselectFirstRowコールを転送する必要があります。 tableView:numberOfRowsInSection:は複雑なことを行う場所ではありません...それは非常に頻繁に呼ばれています。

あなたがいる間は、項目数をチェックするロジックをselectFirstRowに移動します。すなわち

if (self.ichronoAppointments.count) { 
    //select the first row 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 
} else { 
    //don't 
    NSLog(@"Couldn't select first row. Maybe the data is not yet loaded?"); 
} 

このように、DRY /モジュラー/クリーナーはそうです。

関連する問題