NSCoding坚持UIImage

Jes*_*ica 1 iphone xcode uiimageview uiimage ios

我在与此主题相关的stackoverflow上看到了不同的问题.有人说不NSCoding符合,UIImage其他人说用iOS 5,它确实符合.

我想在我的应用程序中保留图像.我正在使用encodedecode方法和一切(标题,标签等)是持久的,但不是图像.

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:title forKey:@"title"];
    [aCoder encodeObject:link forKey:@"link"];
    [aCoder encodeObject:creator forKey:@"creator"];
    [aCoder encodeObject:pubDate forKey:@"pubDate"];
  //  [aCoder encodeObject:thumbnail forKey:@"thumbnail"];
    [aCoder encodeObject:UIImagePNGRepresentation(thumbnail) forKey:@"thumbnail"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self)
    {
        [self setTitle:[aDecoder decodeObjectForKey:@"title"]];
        [self setLink:[aDecoder decodeObjectForKey:@"link"]];
        [self setCreator:[aDecoder decodeObjectForKey:@"creator"]];
        [self setPubDate:[aDecoder decodeObjectForKey:@"pubDate"]];
        [self setThumbnail:[aDecoder decodeObjectForKey:@"thumbnail"]];        
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我也在使用UIPNGRepresentation但不起作用.有人可以帮我弄这个吗.

谢谢.

rde*_*mar 7

你没有编码图像.UIImagePNGRepresentation()返回一个NSData对象.NSData符合NSSecureCoding.我之前没有使用过,但文档说你必须像这样解码它:

id obj = [decoder decodeObjectOfClass:[MyClass class] forKey:@"myKey"];
Run Code Online (Sandbox Code Playgroud)

编辑后:上面似乎没有必要.我在测试应用程序中使用了以下代码,并且编码和解码图像的两种方法都有效.

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"personName"];
    [aCoder encodeObject:self.image2 forKey:@"thumbnail2"];
    [aCoder encodeObject:UIImagePNGRepresentation(self.image1) forKey:@"thumbnail"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self)
    {
        [self setName:[aDecoder decodeObjectForKey:@"personName"]];
        [self setImage2:[aDecoder decodeObjectForKey:@"thumbnail2"]];
        [self setImage1:[UIImage imageWithData:[aDecoder decodeObjectForKey:@"thumbnail"]]];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

正如Aleph所说,问题必定在其他地方.