将UIImage添加到数组时无法识别的选择器错误

Spe*_*efy 2 objective-c nsdictionary uiimage nsarray ios

我存储UIImage在一个NSDictionary,然后使NSDictionary在应用中的另一个地方.gridImages是一个NSMutableArray

NSDictionary *pageDict = [pageArray objectAtIndex:0];

UIImage *pageImage = [pageDict objectForKey:@"image"];

[gridImages addObject:pageImage];
Run Code Online (Sandbox Code Playgroud)

pagedict返回

{
    class = is;
    image = "<UIImage: 0x14e20e10>";
    name = kaka;
    page = 64;
}
Run Code Online (Sandbox Code Playgroud)

这大概是我做的

UIImage *pageImage = [pageDict objectForKey:@"image"];
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将UIImage添加到数组时,我收到此错误:

-[UIImage stringByDeletingPathExtension]: unrecognized selector sent to instance 0x14e20e10
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

编辑:

对于NSDictionary,我尝试存储UIImageas NSData:

NSData *imageData = UIImagePNGRepresentation(textbookImage);
    [pageDict setObject:imageData forKey:@"image"];
    [pageDict setObject:textbookName forKey:@"name"];
    [pageDict setObject:page forKey:@"page"];
    [pageDict setObject:nameOfClass forKey:@"class"];
Run Code Online (Sandbox Code Playgroud)

并解析它像这样:

  NSData *imageData = [pageDict objectForKey:@"image"];
   UIImage *pageImage = [UIImage imageWithData:imageData];
Run Code Online (Sandbox Code Playgroud)

但它仍然返回相同的错误

Aks*_*eri 6

你不能设置UIImageNSUserDefaults作为UIImage无属性列表对象.

您最好存储文档目录中的图像路径.

这段代码会有所帮助.

// SET Image

NSString *strImagePath = //path of image from documents directory

NSMutableDictionary *dictOne = [NSMutableDictionary dictionaryWithCapacity:0];

[dictOne setObject:strImagePath forKey:@"image"];

[[NSUserDefaults standardUserDefaults] setObject:dictOne forKey:@"dict"];
Run Code Online (Sandbox Code Playgroud)

// GET图片

 NSMutableDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"dict"];

    UIImage *image = [UIImage imageWithContentsOfFile:[dict objectForKey@"image"]];
Run Code Online (Sandbox Code Playgroud)

编辑:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0];
 NSString *strImageFileName = [documentsDirectory stringByAppendingPathComponent:@"yourImageFileName"];
 UIImage *image = // Your image;

 NSData *dataImage = UIImageJPEGRepresentation(image, 0.5f);
 /* Good image quality
        NSData *dataImage = UIImagePNGRepresentation(image); 
 */

[dataImage writeToFile:strImageFileName atomically:YES];
Run Code Online (Sandbox Code Playgroud)

快乐的编码.

  • 问题出在我正在使用的uicollectionview中......它需要是`gridImageView.image = [gridImages objectAtIndex:indexPath.row];`而不是`gridImageView.image = [UIImage imageNamed:[gridImages objectAtIndex:indexPath.row] ];`.我也用文件目录; 它要快得多. (2认同)