0

NSObjectモデルを実装する適切な方法について少し混乱しています。Book一部のデータ(NSString、UIImageなど)をストーリー化するクラスを作成していますが、データをサーバーに保存しています。このようなメソッドを作成するときに、そのBookようなメソッドを作成する必要があります。-(void)loadDataFromServerWithID:(NSString *)bookIDBook

Book *book = [Book alloc] init];
[book loadDataFromServerWithID:@"1234"];

loadDataFromServerメソッド内でJSONデータをダウンロードし、インスタンス変数をオブジェクトに割り当てますか?

私はこれを行うことができる多くの方法を考えてきましたが、とにかくそれを行うための効率的/スマートな方法が本当にわかりません。

助けてくれてありがとう。

4

2 に答える 2

1

これを行う1つの方法は、サーバーとの通信を担当するクラスを1つだけにして、そのクラスbookFromServerWithID:に、新しい本のオブジェクトを返すような名前のメソッドを用意することです。他のバリエーションには、メインスレッドのブロックを回避するための何らかの形式のコールバックが含まれます。

非同期ロードを行うには、ローダーのどこかで前述のメソッドと同様のメソッドを作成し、[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]おそらくそのメソッドを呼び出します。コールバックでは、接続からのデータを解析し、メソッドへのコールバックにBookオブジェクトを渡します。

これまでにキューを操作したことがない場合は、並行性プログラミングガイドが役立ちます(少し長くて詳細な場合)。

于 2012-06-15T20:32:39.427 に答える
1

サーバーからのデータの取得をどのように処理しますか?UIをブロックしないように、アプリでは常に非同期呼び出しを行う必要があります。AFNetworkingを試してみることをお勧めします。サーバーがJSONを送り返す場合、JSONは直接NSDictionaryに変換されます。

私はモデルに次のようなinitメソッドを含めるのが好きです:

- (id)initWithDictionary:(NSDictionary *)dictionary
{
    self = [super init];

    if (self) {
        self.title = [dictionary objectForKey:@"title"];
        self.nbOfPages = [dictionary objectForKey:@"nbOfPages"];
        // etc.
    }

    return self;
}

パラメータがJSONが解析された後に取得する辞書である場合。

Ben ScheirmanがAFNetworkingについてのスクリーンキャストを作成し、これを実現する方法を正確に説明しています。チェックしてください。

于 2012-06-15T21:02:00.730 に答える