1

私は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 を返さないように、おそらくスレッドロックですか?どんなアイデアでも大歓迎です。

ありがとう!

4

2 に答える 2