ios NSUserDefaults 사용 방법

3783 단어
이 문서에서는 NSUserDefaults 의 저장, 픽업, 제거 방법에 대해 간략하게 설명합니다. 코드는 다음과 같습니다.
[[NSUserDefaults standardUserDefaults] setObject:@"exampleObject" forKey:@"exampleKey"];// 
[[NSUserDefaults standardUserDefaults] objectForKey:@"exampleKey"];// 
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"exampleKey"];//  

NSUserDefaults를 사용하여 NSArray, NSData, NSDictionary, NSString, NSNumber 등 기본 데이터 유형을 제외한 사용자 정의 유형을 저장합니다. 오류는 다음과 같습니다.
//      TradeRecordModel   Model Array NSUserDefaults 
Attempt to set a non-property-list object (
    "",
    "",
    ""
) as an NSUserDefaults/CFPreferences value for key myWalletTradeRecordList

사용자 정의 유형의 대상을 저장하려면 NSUserDefaults로 저장할 때 이를 압축 처리하고 꺼낼 때 먼저 해제해야 한다.다음은 NSUserDefaults가 다음과 같은 코드로 사용자 정의 모델(TradeRecordModel)을 저장하는 경우입니다.
/**
 *  TradeRecordModel.h
 */
@interface TradeRecordModel : NSObject  //      
@property (nonatomic,strong) NSString * ID;
@property (nonatomic,strong) NSString * title;
@property (nonatomic,strong) NSString * change;
@property (nonatomic,strong) NSString * created_at;
HMSingletonH(TradeRecordModel)//    
@end
/**
 *  TradeRecordModel.m
 */
@implementation TradeRecordModel
HMSingletonM(TradeRecordModel)//    
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
    if ([key isEqualToString:@"id"]) {
        _ID = value;
    }
}
#pragma mark NSCoding
//   :  NSCoding     
- (id)initWithCoder:(NSCoder *)aDecoder{
    
    if (self == [super init]) {
        _ID = [aDecoder decodeObjectForKey:@"id"];
        _title = [aDecoder decodeObjectForKey:@"title"];
        _change = [aDecoder decodeObjectForKey:@"change"];
        _created_at = [aDecoder decodeObjectForKey:@"created_at"];
    }
    return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:_ID forKey:@"id"];
    [aCoder encodeObject:_title forKey:@"title"];
    [aCoder encodeObject:_change forKey:@"change"];
    [aCoder encodeObject:_created_at forKey:@"created_at"];
}
@end

모델 클래스 처리는 NSUserDefaults 저장소를 호출할 때 다음 코드로 처리됩니다.
TradeRecordModel *model = [TradeRecordModel new];
for (NSDictionary *dict in response) {
      [model setValuesForKeysWithDictionary:dict];//  model
      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];//  model
      NSLog(@"    :%@",data)
      [arr addObject:data];                                                          
}
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];

모델 설정, 참조 링크:http://www.jianshu.com/p/76d6d1c56d3b.나머지 문제는 자신의 실제 상황을 참고하십시오.NSUserDefaults 체크 아웃 데이터를 호출할 때 코드는 다음과 같습니다.
NSArray *arr = [[NSUserDefaults standardUserDefaults] objectForKey:key];
TradeRecordModel *model = [TradeRecordModel new];
for (NSData *data in arr) {
    model = [NSKeyedUnarchiver unarchiveObjectWithData:data];//  model
    NSLog(@"    :%@",model.ID)
    [tradeRecordListArr addObject:model];
}

가변수 그룹tradeRecordListArr에 이전에 저장한 모델이 저장되어 있습니다.또한 다음과 같은 NSUserDefaults 매크로 정의 방법에 대해 설명합니다.
//NSUserDefault  
#define SAVEDEFAULTS(value,key) [[NSUserDefaults standardUserDefaults] setObject:value forKey:key];\
                                [[NSUserDefaults standardUserDefaults] synchronize];
#define GETDEFAULTS(key) [[NSUserDefaults standardUserDefaults] objectForKey:key];

The end!

좋은 웹페이지 즐겨찾기