AFNetworking替代sendSynchronousRequest以填充CoreData

时间:2012-09-07 17:35:50

标签: ios core-data nsurlconnection afnetworking

我在填充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"];
                 }];

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

2 个答案:

答案 0 :(得分:0)

NSURLConnection也可以处理异步。

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

+ sendAsynchronousRequest:queue:completionHandler:

如果您需要定位iOS< 5然后使用NSURLConnection的委托模式。可以在NSURLConnection and grand central dispatch中找到一个好的包装器。

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

  • (1)使用新的基于核心数据队列的API(iOS> = 5)
  • (2)在NSOperation内启动NSOperationQueue并在后台进行长时间工作
  • (3)使用GDC

处理(2)或(3)时,请注意核心数据约束(线程约束)。

希望有所帮助。

P.S。如果你想知道其他事情,请告诉我。

答案 1 :(得分:0)

NSURLConnectionsendAsynchronousRequest:queue:completionHandler:条消息。