【问题标题】:Updating NSManagedObjects via userInfo通过 userInfo 更新 NSManagedObjects
【发布时间】:2012-03-23 10:53:57
【问题描述】:

我正在编写一个实用程序来将照片从 iOS 设备异步上传到 Web 服务器。每张照片都由一个Photo Core Data 实体表示,该实体在文件系统中具有照片文件名的属性,以及一个布尔值has_been_uploaded 属性。

我想建立一个上传这些图片的队列,然后在上传完成后将它们的has_been_uploaded 属性设置为YES。我将 ASIHTTPRequest 和 ASINetworkQueue 用于网络方面。

从 Core Data 获取所需的图像并上传它们工作正常,然后我的问题是为正确的实体更新 has_been_uploaded 属性。

我现在的代码是这样的:

for (Photo *myPhoto in [fetchedResultsController fetchedObjects]) {
    if(myPhoto.path != nil) {
        __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/postimage"]];

        NSString *imagePath = [NSString stringWithFormat:@"%@.png",[documentsDirectory stringByAppendingPathComponent:[myPhoto valueForKey:@"path"]]];
        [request addFile:imagePath withFileName:[NSString stringWithFormat:@"%@.png",myPhoto.path] andContentType:@"image/png" forKey:@"image"];
        [request.userInfo setValue:myPhoto forKey:@"photo"];
        [[self imageUploadQueue] addOperation:request];
    }
}
[[self imageUploadQueue] go];

但是在 ASIHTTPRequest 的 didComplete 委托方法中,当我尝试从请求的 userInfo 字典中检索 Photo 对象时,它始终为空:

- (void)queueRequestFinished:(ASIHTTPRequest *)request
{
    Photo *photo = (Photo *)[request.userInfo valueForKey:@"photo"];
    NSLog(@"uploaded image for photo: %@",photo);
}

如何可靠地检索正确的 Core Data 对象,以便在每个请求完成后更新其状态?

谢谢!

【问题讨论】:

    标签: ios cocoa core-data asihttprequest


    【解决方案1】:

    由于每个托管对象都与它的托管对象上下文绑定,我认为,你不能通过互联网发送一个对象然后将其取回,因为它会失去它与上下文的链接,所以你最好只发送 NSmanagedObjectID然后使用此 ID 从您的上下文中检索对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多