3

まず、SO コミュニティに感謝します。私は多くのことを学びました。ただし、私はまだ Objective C の初心者なので、質問があります。これが無知な質問である場合は、事前に謝罪してください。

Web API からNSURLConnectionカスタム オブジェクト ( ) を取得するためにサブクラス化しました。myObject各オブジェクトは、完了するために API を 2 回呼び出す必要があります。最初の呼び出しは、オブジェクトのリストから id プロパティを取得することです。2 番目の呼び出しは、その ID を使用して別の URL を構築し、残りのmyObjectプロパティを設定するためのものです。すべてがうまく機能していますが、tableViewsection based on a completion of all of themyObject objects within anNSMutableArray` をリロードするための私のアプローチの正しさについて質問があります。

myObjectsこれは、すべての不完全なものを正常にインスタンス化してフェッチし、それらを に追加した後に呼び出すメソッドですNSMutableArray。の各インスタンスの 2 番目のネットワーク呼び出しでのみ使用/設定されるmessageStringのプロパティです。したがって、完全性を確認するために使用すると考えました。は変更可能で、すべての不完全な. それだけです。サブクラス化された の作成を処理するストア。myObjectmyObjectarrayOfMyObjectsmyObjectsMyStoreClassNSURLConnections

- (void)fetchDetails {

void (^completionBlock)(myObject *obj, NSError *err, int statusCode) = ^(myObject *obj, NSError *err, int statusCode) {

    if (!err && statusCode == 200) {

        NSArray *completionCheckArray = [arrayOfMyObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"messageString = %@", [NSNull null]]];

        if ([completionCheckArray count] == 0) {
            [[self tableView] reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];
        }


    } else if (!err && statusCode != 200) {
        [self statusCodeError:statusCode];
    } else {
        [self generalError:err];
    }
};

    for (myObject *mobj in arrayOfMyObjects) {
    [[MyStoreClass sharedStore] fetchDetails:mobj withCompletion:completionBlock];
    }
}

これは機能しますが、myObjects. もしそうなら、すべての完了をチェックするための代替アプローチはmyObjects何ですか?

4

1 に答える 1

2

可能で実行可能なアプローチは、KVO (Key Value Observing) を使用することです。該当するKey-Value Observing Programming Guide を確認してください。

例: 特定のサービス呼び出しから予想されるオブジェクトの数 (つまり、オブジェクト数) がわかっている場合、オブジェクトを保持する配列オブジェクトにオブザーバーを接続し、要素が追加されるたびに通知を受けることができます。挿入/削除用の NSMutableArray

于 2012-12-03T18:39:38.510 に答える