我正在尝试将使用应用程序拍摄的图像保存到核心数据,然后将其显示在UITableView中。我写了一些我认为应该有用的代码,但事实并非如此。提前谢谢!
以下是保存图片的代码:
- (void)saveImage {
// NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(self.thumbImage)];
//
// [managedObjectContext setValue:imageData forKey:@"imageData"];
//
// NSLog(@"Saved to CoreData");
NSManagedObjectContext *context = [self managedObjectContext];
TimeTravelFeed *timeTravelFeed = [NSEntityDescription insertNewObjectForEntityForName:@"TimeTravelFeed" inManagedObjectContext:context];
NSData *imageData = UIImageJPEGRepresentation(thumbImage, 0.8f);
[timeTravelFeed setValue:imageData forKey:@"imageData"];
}
我正在展示它:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
PhotoCell *cell = (PhotoCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[PhotoCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
// Configure the cell...
TimeTravelFeed *feed = [timeTravelFeeds objectAtIndex:indexPath.row];
NSData *data = feed.imageData;
self.feedImage = [UIImage imageWithData:data];
cell.thumbImage = self.feedImage;
return cell;
}
答案 0 :(得分:2)
您的代码存在许多问题。
首先,正如已经指出的那样,你没有打电话给[context save:nil]
。
其次,您的单元格似乎没有图像视图,只有图像。这不是很透明。据推测,该单元负责将feedImage
属性分配给某个图像视图。最好为PhotoCell
提供图像视图属性并用
cell.imageView.image = imageRetrieved;
第三,在单元格中,首先将转换后的图像分配给某个类变量(self.feedImage
)。这不合逻辑,完全没必要。而是使用具有局部范围的变量或直接将图像分配给图像视图。
最后,你不应该在Core Data中存储大的blob(照片)。建议您仅存储小图像,例如缩略图。对于较大的文件,您应该将路径存储在Core Data实体中,将图像文件存储在documents目录中。这也可以通过在模型编辑器中选中“允许外部存储”来自动完成。
其他建议:在NSManagedObject
子类中进行转换,这样您就不必关心控制器的这种技术性。
答案 1 :(得分:0)
看起来您没有成功保存图片。尝试将此添加到saveImage
if (![context save:&error]) {
NSLog(@"Some error", [error localizedDescription]);
}