Я новичок в разработке iOS и борьбе с UITableViews.Почему я не могу перезагрузить таблицу
Моя проблема заключается в том, что я заполняю свой UITableView данными с внешнего сервера, но из-за многопоточности он не дожидается, пока данные не поступят до загрузки представления таблицы.
Моя нынешняя идея - перезагрузить представление таблицы при загрузке данных.
Ранее в одном классе DailyBreakdown.c, я перезагружать вид таблицы с помощью этого кода:
-(void)viewWillAppear:(BOOL)animated
{
[[self class] getAllActivities];
[super viewWillAppear:animated];
[self makeObjects];
[self.tableView reloadData];
}
Так на обратный вызов, когда мои нагрузки данных (с помощью Restkit), я пытаюсь вызвать [self.tableView reloadData ] еще раз, но я получаю ошибки:
Определение «структуры objc_class» должны быть импортированы из модуля «ObjectiveC.runtime» до того, как требуется
неявной удобст rsion из Objective-C типа указателя «класс» на C указатель типа «структура objc_class *» требует мостика отливать
Вот метод, где я вернуть объекты активности из API:
+(NSArray *)getAllActivities{
if (allActivities == nil) {
// Load the object model via RestKit
//allActivities = [[NSMutableArray alloc] initWithObjects:@"Workout", @"Baked cake", @"Read for HR", nil];
allActivities = [[NSMutableArray alloc] init];
RKObjectManager *objectManager = [RKObjectManager sharedManager];
[objectManager getObjectsAtPath:@"/activities"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
//allActivities = [mappingResult array];
allActivities = [NSMutableArray arrayWithArray: [mappingResult array]];
[[self class] makeObjects];
/*** THIS LINE IS THE PROBLEM **/
[self.tableView reloadData];
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
NSLog(@"Hit error: %@", error);
}];
}
return allActivities;
}
Итак, почему я не могу называть [self.tableView reloadData], как раньше? Как мне это сделать изнутри метода класса?
Кроме того, есть ли лучший способ выполнить это, помимо перезагрузки таблицы? Может быть, threadlocking, чтобы allActivities не возвращал нуль при загрузке представления? Любые идеи приветствуются.
Спасибо!
Работал! Спасибо! Различие между методами класса и экземпляра ссылается на меня, поэтому мне придется исследовать это. Но теперь мой tableView заполняется данными сервера, что является огромной вехой! Спасибо! – corbin
http://stackoverflow.com/a/11174572/1990236 вот неплохое объяснение методов экземпляра и класса в Objective-C –