使用Asynchronously下载后,将UIImage保存到核心数据或图像路径中

时间:2016-01-02 01:55:16

标签: ios objective-c core-data uiimage afnetworking

我有一个获取数据的api,包括来自api的Image url,并将数据存储在Core Data中。

我正在使用AFNetworking以异步方式获取数据而没有任何问题。

但是,我现在需要预取图像并将UIImage或其本地路径存储在CoreData中而不是远程URL。

我已经将AFHTTPSessionManager子类化并使用:

layout_width

我现在需要异步获取图像并将其存储在本地并将路径存储在实体中或将UIImage存储在实体中。除了在调用块之后获取Correct Entity对象的句柄之外,保存/存储不是问题。

我考虑过使用AFNetworking + UIImage并添加:

    return [self POST:urlPath parameters:parameters success:^(NSURLSessionDataTask * __unused task, id JSON) {

    NSArray *postsFromResponse = JSON;
    if([postsFromResponse count] > 0)
    {
        for (NSDictionary *resp in postsFromResponse)
        {

            gotResponse = YES;
            NSNumber *Id = [resp valueForKey:@"Id"];
            NSString  *imageUrl = [resp valueForKey:@"url"];

            Post*info = [self getPostWithId:Id];

                if (!info)
                {
                    info = (Post*)[NSEntityDescription insertNewObjectForEntityForName:@"Post" inManagedObjectContext:self.managedObjectContext];

                }
                info.imageUrl = imageUrl;

               .....
        }
}

但是,如果我想在本地存储它,我需要使用回调方法,但我不知道如何获得正确的实体。

我想这样做:

NSURL *url = [[NSURL alloc] initWithString:@"myUrl"]];
[info.image setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"]];

但是当有多个帖子被迭代时,它并没有将它存储在正确的实体中。

有没有人能朝正确的方向发展?

1 个答案:

答案 0 :(得分:1)

我的建议:不要在回调块中使用对现有实体对象的引用。而是将实体的标识符传递给块。在块中,您可以根据标识符从本地数据库中检索实体对象,更新其图像URL并保存。