Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于填充CoreData的sendSynchronousRequest的AFNetworking替代方案_Ios_Core Data_Nsurlconnection_Afnetworking - Fatal编程技术网

Ios 用于填充CoreData的sendSynchronousRequest的AFNetworking替代方案

Ios 用于填充CoreData的sendSynchronousRequest的AFNetworking替代方案,ios,core-data,nsurlconnection,afnetworking,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 *dataRes

我目前正在从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"];
有没有更好的(异步)方式来实现这一点?对于这种情况,最好的方法是什么?因为我们处理的是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,即使上面的*数据在完成处理程序中不是null。在同步方法中,图像可以很好地保存。我缺少什么?

NSURLConnection也可以处理异步

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

如果需要将iOS设置为<5,则使用
NSURLConnection
的委托模式。这方面的好包装可以在中找到

关于核心数据,我认为这要视情况而定。如果需要存储的数据很便宜,可以在主线程中进行存储。相反,你有三种不同的方法:

  • (1) 使用新的基于核心数据队列的API(iOS>=5)
  • (2) 在
    NSOperationQueue
    中启动
    NSOperation
    并在后台执行长时间的工作
  • (3) 使用GDC
在处理(2)或(3)时,请注意核心数据约束(线程约束)

希望有帮助


另外,如果你想知道其他事情,请告诉我。

这里有一个
sendAsynchronousRequest:queue:completionHandler:
的消息。

在方法名的
同步部分前面添加一个“a”字母…@H2CO3简明而好的注释+1我认为你需要在上下文中执行
保存
。但要注意线程。像您这样从不同的线程访问
NSManagedObject
NSManagedObjectContext
容易出错。要避免这种情况,而不是传递新队列,请对
NSURLConnection
使用
[NSOperationQueue mainQueue]
。下载将异步完成,而数据保存将在主线程上完成。此外,我会注意当你在核心数据保存图像。这是一条简单的经验法则:。当你保存数据时,如果你下载的图像很大,你可能会注意到应用程序冻结。如果图像很小,延迟可以忽略不计。
+ sendAsynchronousRequest:queue:completionHandler: