【发布时间】:2013-10-05 18:11:50
【问题描述】:
我是 iOS 开发和 UITableViews 的新手。
我的问题是我正在使用来自外部服务器的数据填充我的 UITableView,但由于多线程,它不会等到数据到达后才加载表格视图。
我目前的想法是在数据加载时重新加载表格视图。
之前在同一个类 DailyBreakdown.c 中,我使用以下代码重新加载表格视图:
-(void)viewWillAppear:(BOOL)animated
{
[[self class] getAllActivities];
[super viewWillAppear:animated];
[self makeObjects];
[self.tableView reloadData];
}
所以在我的数据加载(使用 Restkit)时的回调中,我尝试再次调用 [self.tableView reloadData],但出现错误:
'struct objc_class'的定义必须从模块中导入 'ObjectiveC.runtime' 之前是必需的
Objective-C 指针类型 'Class' 到 C 指针的隐式转换 type 'struct objc_class *' 需要桥接演员表
这是我从 API 返回 Activity 对象的方法:
+(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] 呢?我将如何从我的类方法中执行此操作?
此外,除了重新加载 tableview 之外,还有更好的方法来完成此操作吗?也许线程锁定以便加载视图时 allActivities 不返回 nil ?欢迎任何想法。
谢谢!
【问题讨论】:
标签: ios objective-c uitableview restkit