将图像数据保存到核心数据但再次启动模拟器,它消失了

Posted

技术标签:

【中文标题】将图像数据保存到核心数据但再次启动模拟器,它消失了【英文标题】:Saved image data to core data but launches simulator again, it's gone 【发布时间】:2013-12-29 07:38:56 【问题描述】:

我已经将图像数据保存到core data,关键是二进制数据格式。保存到核心数据后,我使用 valueForKey: 在 UIImageView 中显示图像。但是我再次启动模拟器后,仍然保存了所有内容,但是图像数据没有了,当我 NSLog 键的数据描述时,它是空的。

NSDictionary *show = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
Summary *summary = [NSEntityDescription insertNewObjectForEntityForName:@"Summary" inManagedObjectContext:weakSelf.managedObjectContext];
summary.title = show[@"title"];
summary.poster = show[@"images"][@"poster"];

SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadWithURL:[NSURL URLWithString:summary.poster] options:SDWebImageProgressiveDownload progress:^(NSUInteger receivedSize, long long expectedSize) 

 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
    NSData *data = UIImageJPEGRepresentation(image, 0.5);
    summary.posterImageData = data;
];

[weakSelf.managedObjectContext dct_saveWithCompletionHandler:^(BOOL success, NSError *error) 
    if (success) 
     else 
        NSLog(@"%@", error);
    
];

【问题讨论】:

【参考方案1】:

我认为您当前的代码,在 dct_saveWithCompletionHandler 之后调用了 downloadWithURL 的完成块,尝试:

SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadWithURL:[NSURL URLWithString:summary.poster] options:SDWebImageProgressiveDownload progress:^(NSUInteger receivedSize, long long expectedSize) 

 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
    NSData *data = UIImageJPEGRepresentation(image, 0.5);
    summary.posterImageData = data;
    [weakSelf.managedObjectContext dct_saveWithCompletionHandler:^(BOOL success, NSError *error) 
        if (success) 
         else 
            NSLog(@"%@", error);
        
    ];    
];

【讨论】:

如果保存不成功,我将无法创建获取请求并取回结果?【参考方案2】:

确保您实际保存的是托管对象上下文。仔细检查您是否也正确设置了 MOC 的并发类型。

【讨论】:

我保存了上下文,然后创建了一个获取请求来取回结果。这是否意味着我已经保存了上下文。如果不是,如何确定?

以上是关于将图像数据保存到核心数据但再次启动模拟器,它消失了的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 删除最后一个条目

无法使用 RestKit 0.20 在构建之间持久化数据

回发后,检查值消失

将图像保存到核心数据中并将其提取到 tableview 单元格中

SQLite数据库从Android模拟器中消失了

核心数据迁移启动需要多长时间?