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"];
                 }];

由于某种原因,当我稍后访问托管对象时,图像属性始终为空,即使上面的 *data 在完成处理程序中不为空。图像在同步方法中保存得很好。我错过了什么?

4

2 回答 2

0

NSURLConnection也可以处理异步。

您可以使用的方法是 (iOS >= 5) 是

+ sendAsynchronousRequest:queue:completionHandler:

如果您需要以 iOS < 5 为目标,则将委托模式用于NSURLConnection. 可以在NSURLConnection 和 grand central dispatch中找到一个很好的包装器。

关于核心数据,我会说这取决于。如果您需要存储的数据很便宜,请在主线程中进行。相反,您有三种不同的方法来做到这一点:

  • (1) 使用新的 Core Data 基于队列的 API (iOS >= 5)
  • (2)在aNSOperation内开始aNSOperationQueue并在后台做长时间的工作
  • (3)使用GDC

在处理(2)或(3)时要注意Core Data的约束(线程约束)。

希望有帮助。

PS如果你想知道别的让我知道。

于 2012-09-07T17:49:37.310 回答
0

NSURLConnectionsendAsynchronousRequest:queue:completionHandler:的消息。

于 2012-09-07T17:54:15.410 回答