Ali*_*Ali 5 iphone serialization custom-object nsuserdefaults nsmutablearray
我有一个名为Occasion的自定义对象,定义如下:
#import <Foundation/Foundation.h>
@interface Occasion : NSObject {
NSString *_title;
NSDate *_date;
NSString *_imagePath;    
}
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSDate *date;
@property (nonatomic, retain) NSString *imagePath;
Run Code Online (Sandbox Code Playgroud)
现在我有一个NSMutableArray of Occasions,我想保存到NSUserDefaults.我知道这是不可能的,所以我想知道哪种方法最简单?如果序列化是答案,那么如何?因为我阅读了文档但却无法理解它的完整工作方式.
Mik*_*ler 11
您应该使用类似NSKeyedArchiver的序列化数组NSData,将其保存到NSUserDefaults以后再用于NSKeyedUnarchiver反序列化:
NSData *serialized = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[[NSUserDefaults standardUserDefaults] setObject:serialized forKey:@"myKey"];
//...
NSData *serialized = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:serialized];
Run Code Online (Sandbox Code Playgroud)
您需要NSCoding在Occasion类中实现协议并正确保存各种属性才能使其正常工作.有关更多信息,请参阅" 存档和序列化编程指南".执行此操作不应超过几行代码.就像是:
- (void)encodeWithCoder:(NSCoder *)coder {
    [super encodeWithCoder:coder];
    [coder encodeObject:_title forKey:@"_title"];
    [coder encodeObject:_date forKey:@"_date"];
    [coder encodeObject:_imagePath forKey:@"_imagePath"];
}
- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    _title = [[coder decodeObjectForKey:@"_title"] retain];
    _date = [[coder decodeObjectForKey:@"_date"] retain];
    _imagePath = [[coder decodeObjectForKey:@"_imagePath"] retain];
    return self;
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5694 次  |  
        
|   最近记录:  |