2016-01-02 63 views
0

下載後我有一個獲取數據,包括來自API的圖片網址和存儲核心數據的數據的API。保存UIImage的是對核心數據或圖像路徑與異步

我使用AFNetworking到沒有問題異步獲取數據。

不過,我現在需要預取的圖像並存儲在CoreData中的UIImage或本地路徑,而不是遠程URL的。

我已經subclassessed 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的實體。除了在調用塊之後獲取正確實體對象的句柄之外,保存/存儲不是問題。

我想過使用AFNetworking +的UIImage並補充說:

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

但是,如果我想以本地存儲它,我需要使用回調方法,但我不知道怎麼弄的正確的實體。

我想做的事:

__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) { 
}]; 

但它不是將其存儲在正確的實體時,有過被迭代多個帖子。

有沒有人有正確的方向轉向?

回答

1

我的建議:不要用你的回調塊內現有的實體對象的引用。相反,將實體的標識符傳遞給塊。在塊內部,根據標識符從本地數據庫中檢索實體對象,更新其圖像URL並保存。