2010-10-15 2 views
0

Я получаю сбой при выборе строки: '- [__ NSCFArray objectAtIndex]: индекс (1) за пределы (1)',self.tableview reloadData вызывая сбой в UITableView

я переехал данные из viewWillAppear, потому что мы, хотя это и вызывало крах. Теперь я загружаю его в ViewDidLoad.

Однако, если [self.tableview reloadData]; горит, я получаю этот крах.

Идеи?

-(void) loadData3;{ 

    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"]; 
NSLog(@"AppDelegate.data3 : %@",AppDelegate.data3); 
NSLog(@"self.tableDataSource3 : %@",self.tableDataSource3); 

} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self loadData3]; 
    if(CurrentLevel3 == 0) { 
    self.navigationItem.title = @"Families I Follow"; 
} 
else 
    self.navigationItem.title = CurrentTitle3; 
} 
} 


-(void)viewWillAppear:(BOOL)animated { 
     [super viewWillAppear: animated]; 
      [self.tableview reloadData]; 
} 
+0

В какой строке вы принимаете ошибку? Отправьте код в этом разделе. – Jordan

+0

Не уверен, что это была только опечатка, но [self.tableview reloadData] должен быть [self.tableView reloadData]. Капитал V в таблицеView. – Banjer

ответ

1

Скорее всего, вы меняете массив, который загружает UITableView во время его отображения, поэтому, когда вы нажимаете на строку, строка больше не существует в массиве. Следовательно, ошибка за пределами массива.

+0

, что имеет смысл. Я думал, что если бы у меня был getdata в viewWillAppear, это получило бы его после обновления. Теперь, чтобы выяснить, куда его поместить. –

+0

Похоже, вы пытаетесь использовать один и тот же массив данных для заполнения родительского и дочернего UITableViews. Это неверно. Либо создайте новый массив данных, либо создайте копию текущего массива. – Jordan

+0

Это базовый сверло NSDictionary, если вы выгружаете перезагрузку, все работает и свертывается. Мне не нужен новый, просто обновленный, с новыми данными, которые были только что загружены и сохранены в телефоне. Спасибо за ваше время, я это ценю. –

0

С его происходит при выборе строки, ошибка, скорее всего, в вашем tableView:didSelectRowAtIndexPath: или tableView:willSelectRowAtIndexPath: метода (ов). Ничто не кажется, по-видимому, неправильным с фрагментом кода viewWillAppear:, который вы опубликовали.

1
- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.tableView reloadData]; 
} 

Перемещение reloadData к viewDidAppear решает эту проблему.

Смежные вопросы