【问题标题】:Archieve NSMutable array contains UIImage [closed]存档 NSMutable 数组包含 UIImage [关闭]
【发布时间】:2012-10-27 21:13:31
【问题描述】:

我正在尝试用图像归档 ns mustable 数组,我的代码如下所示:

//in my .h file I have
#define kName @"name"
#define kEmail  @"email"
#define kPhone  @"phone"
#define kDetail @"detail"
#define kImages @"images"
#define kRequestDate  @"requestDate"
#define kRequestSent @"status"

@interface BAPRequest : NSObject
@property (nonatomic) NSString *name;
@property (nonatomic) NSString *email;
@property (nonatomic) NSString *phone;
@property (nonatomic) NSString *detail;
@property (nonatomic) NSMutableArray *images;
@property (nonatomic) NSDate *requestDate;
@property (nonatomic) BOOL requestSent;
@end

//in my .m file I have
#import "BAPRequest.h"

@implementation BAPRequest

@synthesize name, email, phone, detail;
@synthesize images;
@synthesize requestDate;
@synthesize requestSent;

- (void)encodeWithCoder:(NSCoder *)encoder{
  [encoder encodeObject:name forKey:kName];
  [encoder encodeObject:email forKey:kEmail];
  [encoder encodeObject:phone forKey:kPhone];
  [encoder encodeObject:detail forKey:kDetail];
  [encoder encodeObject:images forKey:kImages];
  [encoder encodeObject:requestDate forKey:kRequestDate];
  [encoder encodeBool:requestSent forKey:kRequestSent];
}

- (id)initWithCoder:(NSCoder *)decoder{
  name = [decoder decodeObjectForKey:kName];
  email = [decoder decodeObjectForKey:kEmail];
  phone = [decoder decodeObjectForKey:kPhone];
  detail = [decoder decodeObjectForKey:kDetail];
  images = [decoder decodeObjectForKey:kImages];
  requestDate = [decoder decodeObjectForKey:kRequestDate];
  requestSent = [decoder decodeBoolForKey:kRequestSent];
  return self;
}
@end

当然,我也和其他人一样拥有 NSKeyedArchiver 代码。

其他一切都正确存档,当我保存然后加载它们时,似乎一切正常。

但存档图像似乎不是。

我确实有一个 MutableArray 在存档之前存档每个 BAPObjects,不知道是因为 ios 不支持在 MutableArray 中存档 MutableArray 还是因为我无法轻松存档图像?

干杯 菲尔

【问题讨论】:

    标签: iphone ios nsmutablearray archive encode


    【解决方案1】:

    存档图像不要使用

    而是将 UIImage 转换为 NSData 表示使用 by using UIImageJPEGRepresentationUIImagePNGRepresentation

    然后归档NSMutableArray

    编辑: 您必须将要保存在NSMutableArray 中的项目替换为NSData

    NSData *imageData = UIImagePNGRepresentation([your_array objectAtIndex:0]);
    

    将 UIImage 替换为 imageData

    【讨论】:

    • 我是否必须编写我自己的带有编码或解码的 UIIMage 类,或者我可以覆盖它的编码/解码(如果有的话)?如果你能给我举个小例子,那就太好了。
    • 请检查我的编辑
    • 我添加了一个 UIImage+NSCoding 来帮助对图像进行编码(根据 rob 的建议),但它仍然不起作用。假设如果我添加了编码类别,它将被编译,我是否必须在某处包含 UIImage+NSCoding.h?
    • 对不起,我很笨,它有效。
    【解决方案2】:

    Apple 在 iOS 5.1 中为 UIImage 添加了归档支持。因此,解决问题的一种方法是将部署目标提升到 iOS 5.1。

    如果您不能这样做,请查看UIImage and NSCoding iOS 5.1 的第一个答案。请注意,给定的实现与 Apple 的 UIImage 归档支持向前兼容。

    【讨论】:

    • 你是说如果我简单地加注到 5.1,我不需要做任何改变?我目前在 5.0。
    • 您必须在 iOS 5.1 设备(或模拟器)上运行。将部署目标提高到 iOS 5.1 将阻止您在 iOS 5.0 设备(或模拟器)上运行它。
    • 问题是,我已经在我的 4s 上尝试使用 ios6.1。所以这根本不会改变结果。
    • 我从您针对 iOS 5.0 的链接答案中得到了结果,但只是将其更改为 5.1 并没有帮助
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多