使用异步下载后,将UIImage保存到核心数据或Image路径中



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

我正在使用AFNetworking异步获取数据,没有任何问题。

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

我已经对AFHTTPSessionManager进行了子分类,并使用:

    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;
               .....
        }
}

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

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

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

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

我想做:

__weak Post* weakPost = info;
[info.image setImageWithURLRequest:request placeholderImage:placeholderImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
 .... NSString *path = "....save UIIMage and get local path"
   weakPost.imagePath = path;
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
 }];

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

有人有正确的方向吗?

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

最新更新