ios - NSKeyedArchiver archivedDataWithRootObject 在传递图像模型数组时返回 nil

标签 ios objective-c swift nskeyedarchiver

我正在尝试使用 [NSKeyedArchiver archivedDataWithRootObject:dataArray] 保存一个包含模型的数组,该模型由图像和字符串组成;但此方法在调用此方法 2-3 次后返回 nil。 仅当我尝试存档的模型包含图像时才会发生这种情况。 我检查过数据数组不是零。 下面是我正在使用的代码:

@implementation ImagesModel

- (id)initWithCoder:(NSCoder *)coder{
    if(self = [super init]){
        self.image = [[UIImage alloc]initWithData:[coder decodeObjectForKey:@"image"]];
        self.urlString = [coder decodeObjectForKey:@"urlString"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)coder
{
    [coder encodeObject:UIImagePNGRepresentation(self.image) forKey:@"image"];
    [coder encodeObject:self.urlString forKey:@"urlString"];
}

+ (NSDictionary *)getObjectMapper {
    if (!mapperDictionary) {
        NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
        [dictionary setObject:[PropertyMapping mappingForSimpleTypeWithMappedKeyName:@"image"] forKey:@"image"];
        [dictionary setObject:[PropertyMapping mappingForSimpleTypeWithMappedKeyName:@"urlString"] forKey:@"urlString"];
        mapperDictionary = [dictionary copy];
    }
    return mapperDictionary;
}
- (NSData)ArchiveData {
    if (!dataArray){
       return NO;  //nothing to save
     }
 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dataArray]; //Return Nil
 }

最佳答案

这取决于您加载图片的方式。 以下是可能对您有所帮助的答案:

How to encode a UIImage in an `NSCoder`

此外,如果您想存储 .JPEG 图像,您可能需要使用 UIImageJPEGRepresentation。

关于ios - NSKeyedArchiver archivedDataWithRootObject 在传递图像模型数组时返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511741/

相关文章:

swift - SKLabelNode - 获取实际行数

swift - 如何使用swift将SecKey编码为base64字符串

ios - 打开方式 - iOS 有类似的东西吗?

ios - 如何将图像添加到 UITableViewHeaderFooterView?

javascript - 在 native iOS 应用程序中使用 PassportJS 和 Nodejs 时出现错误 "The redirect_uri URL must be absolute"

objective-c - Foundation NSObject.h 不带 - (id)init 方法

objective-c - 内存使用如何影响电池生命周期?

ios - -[UIViewController tableView :numberOfRowsInSection:]: unrecognized selector sent to instance 0x7ff437517770

ios - 当以编程方式设置 Root View Controller 时,导航和选项卡栏丢失

ios - 如何在第一次点击后停止重新生成墙?