1

iOS プラットフォーム用のアプリの開発を始めたばかりで、Azure の Web サービスを使用してリモート データベースにアクセスしています。テーブルのメソッドを呼び出してreadWithCompletion:、サーバーからデータベース内のすべてのデータを読み取ろうとしました。

メソッド呼び出しの完了ブロックで、items引数をコンソールに記録し、データが正常に取得されています。NSMutableArray *stops = [items mutableCopy]完了ブロックの外にあるデータを取得するためにこれを試しましたが、完了ブロックstopsの範囲外になると nil になります。

ここで何が間違っていますか?

[self.table readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {
    self.stops = [items mutableCopy];
}];
4

1 に答える 1

2

ブロックが非同期で実行されている場合 (これは Web 要求に期待されることです)、ブロックで変更された変数は、ブロックが実行されるまで変更されません。これは、後で要求が完了した後に発生します。

以下は、いくつかの抽象的なコードと、予想されるログ結果です。モデルがオブジェクトの配列であるテーブル ビューがあり、非同期リクエストがこれらのオブジェクトを Web サービスからフェッチするとします。

@property (weak, nonatomic) IBOutlet *tableview;
@property (strong, nonatomic) NSArray *model;

[webRequest performRequest:^(NSArray *result) {
    // this code runs later, when the request completes
    self.model = result;
    // update our UI to indicate that we fetched some data
    [self.tableview reloadData];
}];

// this code runs right away, so self.model is uninitialized at this point
// this is where we should update our UI to say that we are busy fetching data
于 2013-03-09T22:23:05.357 に答える