私は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 ポインター型 '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] を呼び出せないのはなぜですか? クラスメソッド内からこれを行うにはどうすればよいですか?
また、テーブルビューをリロードする以外にこれを達成するためのより良い方法はありますか? ビューがロードされたときに allActivities が nil を返さないように、おそらくスレッドロックですか?どんなアイデアでも大歓迎です。
ありがとう!