【问题标题】:Saving Image to core Data将图像保存到核心数据
【发布时间】:2012-05-05 21:04:50
【问题描述】:

我是核心数据相关的新手。任何人都可以帮助我提供正确的步骤/教程,展示如何将图像保存到核心数据及其检索。我已经能够存储字符串数据,但是我的应用程序在尝试保存图像时崩溃。 为了节省:

DataEvent *event = (DataEvent *)[NSEntityDescription insertNewObjectForEntityForName:@"DataEvent"
                                                          inManagedObjectContext:managedObjectContext];
NSURL *url2 = [NSURL URLWithString:@"xxxxxxxxxxxxxxx SOME URL xxxxxxxxxxxx"];

NSData *data = [[NSData alloc] initWithContentsOfURL:url2];
imageSave=[[UIImage alloc]initWithData:data];
NSData * imageData = UIImageJPEGRepresentation(imageSave, 100.0);    
[event setValue:self.imageSave forKey:@"pictureData"];

用于检索:

 DataEvent *event = (DataEvent *)[eventsArray objectAtIndex:indexPath.row];
 UIImage *image = [UIImage imageWithData:[event valueForKey:@"pictureData"]];
 UIImageView *imageViewMainBackGround = [[UIImageView alloc] 
 CGRect rect3=CGRectMake(0,2,100.0,100.0); 
 imageViewMainBackGround.frame = rect3;
 [cell.contentView addSubview:imageViewMainBackGround];
 [imageViewMainBackGround release];

【问题讨论】:

  • 模型文件中“pictureData”的数据类型是什么?
  • “开店的型号和开店的型号不兼容”这个错误从哪里来的?
  • 代替这一行 [event setValue:self.imageSave forKey:@"pictureData"];试试这个 event.pictureData = imageData;
  • UIImageJPEGRepresentation 的第二个参数需要一个 0 .. 1 范围内的数字。您使用了一个超出范围的数字 100.0。您的意思可能是 1.0。

标签: objective-c ios cocoa-touch core-data uiimage


【解决方案1】:

您必须将托管对象的 pictureData 值设置为 NSData 对象(在您的情况下为 imageData),而不是 imageSave 对象,这是一个UIImage

【讨论】:

    【解决方案2】:

    如果没有必要,不要更改分辨率..

    NSData * imageData = UIImageJPEGRepresentation(imageSave, 0.0);
    

    // 并更改以下行

    [event setValue:imageData forKey:@"pictureData"];
    

    See the store and Retrieve image from core data tutorial with sample code.

    希望对你有所帮助..

    【讨论】:

    • 您好,执行此操作后,出现错误:原因=“用于打开商店的模型与用于创建商店的模型不兼容”;
    • 在哪里保存或检索..?
    【解决方案3】:

    error: reason = "开店的型号和开店的型号不兼容"

    解决方案:

    从模拟器中删除构建项目并从产品选项卡中清理,现在运行该项目。

    【讨论】:

      【解决方案4】:

      保存:

      NSData *imageData = UIImagePNGRepresentation(myUIImage);
      
      [newManagedObject setValue:imageData forKey:@"imageKey"];
      

      并且 检索图像:

      NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
      UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"imageKey"]];
      [[newCustomer yourImageView] setImage:image];
      

      改变格式

      【讨论】:

        【解决方案5】:

        您可以使用这种 hacky 方式存储图像,核心数据不支持图像,但您可以将图像转换为字符串。

        self.selectedImage?.jpegData(compressionQuality: 1)?.base64EncodedString()
        

        使用此代码,您可以将图像转换为字符串。

        为了检索图像,您应该获取核心数据实例并在到达后到达图像实例,您应该使用此代码将其转换回图像

        if let decodedData = Data(base64Encoded: entity.img as! String, options: .ignoreUnknownCharacters) 
        {let image = UIImage(data: decodedData)}
        

        这是一种非常简单的图像存储方式,但如果您的应用中有太多图像,则不应将它们存储在核心数据中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-17
          • 1970-01-01
          • 2020-10-31
          • 2010-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多