NSUserDefaults數據存儲

//對於數據的存儲:
//當須要存儲的數據是自定義類的對象時,不論是放在NSArray或者NSDcitionary中,自定義類使用NSUserDefaults存儲時,都要
//繼承NSCoding協議

//SearchArticleModel.h文件
@interface SearchArticleModel : NSObject<NSCoding>{
    @property (nonatomic, assign) NSInteger top;
}

//SearchArticleModel.m文件
@implementation SearchArticleModel
- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super init];
    if (self) {
        self.top = [[aDecoder decodeObjectForKey:@"top"] integerValue];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:[NSString stringWithFormat:@"%ld",(long)self.top] forKey:@"top"];
}
@end

//歸檔和解檔的實現方法
//加載最新數據後歸檔
//articleArr中存儲數組
- (void)archiveObject{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *articleArchiveArr = [[NSMutableArray alloc] init];
    for (SearchArticleModel *recommendedAM in articleArr) {   
        NSData *recommendedObj = [NSKeyedArchiver archivedDataWithRootObject:recommendedAM];
        [articleArchiveArr addObject:recommendedObj];
    }
    [defaults setObject:articleArchiveArr forKey:@"articleArr"];
    [defaults synchronize];
}

//加載界面後解檔
//數據放在articleArr數組中
- (void)unarchiveObject{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *recommendArticleModelArr = [[NSMutableArray alloc] init];
    for (NSData *data in [defaults objectForKey:@"articleArr"]) {
       SearchArticleModel *recommendArticleModel  = [[SearchArticleModel alloc] init];
       recommendArticleModel = [NSKeyedUnarchiver unarchiveObjectWithData:data];
       [articleArr addObject:recommendArticleModel];
    }
}

//附另外一種解決方案 
http://www.crifan.com/store_save_array_of_custom_object_class_into_nsuserdefaults_in_iphone_ios/
http://www.crifan.com/nsuserdefaults_sometime_occasion_can_not_save_data_correctly/
相關文章
相關標籤/搜索