1

JSONファイルからコアデータを入力するときに、現在これを行っています:

NSString *urlString = [value objectForKey:@"url"];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *dataResponse = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
[managedObject setValue:dataResponse forKey:@"image"];

AFNetworking でこれを行うためのより良い (非同期) 方法はありますか? この場合の最善の方法は何ですか? CoreData を扱っているため、同期する必要がありますか?

更新:今これを試しています:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
                 {
                     [managedObject setValue:data forKey:@"image"];
                 }];

何らかの理由で後でマネージド オブジェクトにアクセスすると、画像属性は常に null ですが、上記の *data は完了ハンドラーで null ではありません。画像は同期メソッドで正常に保存されます。私は何が欠けていますか?

4

2 に答える 2

0

NSURLConnectionsendAsynchronousRequest:queue:completionHandler:メッセージがあります。

于 2012-09-07T17:54:15.410 に答える
0

NSURLConnection非同期も処理できます。

使用できる方法は (iOS >= 5) です。

+ sendAsynchronousRequest:queue:completionHandler:

iOS 5 未満をターゲットにする必要がある場合は、デリゲート パターンを使用しNSURLConnectionます。これに適したラッパーはNSURLConnection と grand central dispatch にあります。

Core Data については、場合によると思います。保存する必要があるデータが安価な場合は、メイン スレッドで行います。それどころか、それを行うには3つの異なる方法があります。

  • (1) 新しい Core Data キューベースの API を使用 (iOS >= 5)
  • (2) aNSOperation内で aを開始NSOperationQueueし、バックグラウンドで長い作業を行う
  • (3)GDCを利用する

(2)または(3)に対処する場合は、Core Data 制約 (スレッド制約) に注意してください。

それが役立つことを願っています。

PS 他に知りたいことがあれば教えてください。

于 2012-09-07T17:49:37.310 に答える