• NSCoding


    在IOS的开发中,小数据量的持久化都用NSUserDefaults来实现,但是NSUserDefaults只能保存NSString, NSNumber, NSDate, NSArray, NSDictionary这些数据类型,但大多时候,我们会将一个对象实体做持久化的保存,由于不是大批量的数据,不会用到sqlite,那么这个时候NSUserDefaults会是很好的选择,其实对象类型可以通过NSCoding的委托方法来实现的。

    1. View Code //  
    2. //  UserEntity.m  
    3. //  NSCodingDemo  
    4. //  
    5. //  Created by   on 11-5-20.  
    6. //  Copyright 2011  , Inc. All rights reserved.  
    7. //  
    8.   
    9. #import "UserEntity.h"  
    10. #import "AddressEntity.h"  
    11.   
    12. #define SAMPLEDATA_KEY_USERNAME (@"userName")    
    13. #define SAMPLEDATA_KEY_GENDER (@"gender")    
    14. #define SAMPLEDATA_KEY_AGE (@"age")  
    15. #define k_FRIENDS (@"frinds")  
    16. #define k_ADDRESS (@"address")  
    17. #define k_userEntity_addresses (@"addresses")  
    18.   
    19. @implementation UserEntity  
    20. @synthesize userName = _userName;  
    21. @synthesize gender   = _gender;  
    22. @synthesize age      = _age;  
    23. @synthesize friends  = _friends;  
    24. @synthesize address  = _address;  
    25. @synthesize addresses = _addresses;  
    26.   
    27. -(void)dealloc  
    28. {  
    29.     [self.userName release];  
    30.     [self.friends release];  
    31.     [self.address release];  
    32.     [self.addresses release];  
    33.     [super dealloc];  
    34. }  
    35.   
    36.   - (void)encodeWithCoder:(NSCoder*)coder    
    37.   {    
    38.       [coder encodeObject:self.userName forKey:SAMPLEDATA_KEY_USERNAME];  
    39.       [coder encodeInt:self.age forKey:SAMPLEDATA_KEY_AGE];  
    40.       [coder encodeBool:self.gender forKey:SAMPLEDATA_KEY_GENDER];  
    41.       [coder encodeObject:self.friends forKey:k_FRIENDS];  
    42.       [coder encodeObject:self.address forKey:k_ADDRESS];  
    43.       [coder encodeObject:self.addresses forKey:k_userEntity_addresses];  
    44.   }    
    45.   
    46.   - (id)initWithCoder:(NSCoder*)decoder    
    47.   {    
    48.       if (self = [super init])  
    49.       {  
    50.           if (decoder == nil)  
    51.           {  
    52.               return self;  
    53.           }  
    54.           self.userName = [decoder decodeObjectForKey:SAMPLEDATA_KEY_USERNAME];  
    55.           self.gender = [decoder decodeBoolForKey:SAMPLEDATA_KEY_GENDER];  
    56.           self.age = [decoder decodeIntForKey:SAMPLEDATA_KEY_AGE];  
    57.           self.friends = [decoder decodeObjectForKey:k_FRIENDS];  
    58.           self.address = [decoder decodeObjectForKey:k_ADDRESS];  
    59.           self.addresses = [decoder decodeObjectForKey: k_userEntity_addresses];  
    60.       }  
    61.       return self;  
    62.   }   
    63.   
    64. @end  
    1. View Code //  
    2. //  AddressEntity.m  
    3. //  NSCodingDemo  
    4. //  
    5. //  Created by   on 11-5-20.  
    6. //  Copyright 2011  , Inc. All rights reserved.  
    7. //  
    8.   
    9. #import "AddressEntity.h"  
    10. #define k_Id (@"id")    
    11. #define k_AddresEntity_address (@"addrss")    
    12.   
    13.   
    14. @implementation AddressEntity  
    15. @synthesize Id, address;  
    16. -(void)dealloc  
    17. {  
    18.     [self.address release];  
    19.     [super dealloc];  
    20. }  
    21. - (NSString *)description  
    22. {  
    23.   
    24.     return [NSString stringWithFormat:@"id :%d address: %@" , self.Id, self.address];  
    25. }  
    26.   
    27. - (void)encodeWithCoder:(NSCoder*)coder    
    28. {    
    29.     [coder encodeObject:self.address forKey:k_AddresEntity_address];  
    30.     [coder encodeInt:self.Id forKey:k_Id];  
    31.   
    32. }    
    33.   
    34. - (id)initWithCoder:(NSCoder*)decoder    
    35. {    
    36.     if (self = [super init])  
    37.     {  
    38.         if (decoder == nil)  
    39.         {  
    40.             return self;  
    41.         }  
    42.         self.address = [decoder decodeObjectForKey:k_AddresEntity_address];  
    43.         self.Id = [decoder decodeIntForKey:k_Id];  
    44.   
    45.     }  
    46.     return self;  
    47. }   
    48. @end  
      1. View Code -(IBAction)write:(id)sender  
      2. {  
      3.     //get document path  
      4.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
      5.     NSString *documentsDirectory = [paths objectAtIndex:0];  
      6.       
      7.     NSString *filePath = [documentsDirectory stringByAppendingPathComponent:k_FILE_NAME];  
      8.       
      9.     NSMutableData *data = [[[NSMutableData alloc] init] autorelease];  
      10.     NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];  
      11.     UserEntity *userEntity = [[[UserEntity alloc] init] autorelease];  
      12.     userEntity.age = 18;  
      13.     userEntity.gender = NO;  
      14.     userEntity.userName = @"add";  
      15.       
      16.     NSArray *friends = [[NSArray alloc] initWithObjects:@"ac", @"2", @"3", @"4", nil];  
      17.     userEntity.friends = friends;  
      18.       
      19.     AddressEntity *address = [[[AddressEntity alloc] init] autorelease];  
      20.     address.Id = 1;  
      21.     address.address = @"china";  
      22.     userEntity.address = address;  
      23.       
      24.     AddressEntity *address2 = [[[AddressEntity alloc] init] autorelease];  
      25.     address2.Id = 2;  
      26.     address2.address = @"china2";  
      27.       
      28.     AddressEntity *address3 = [[[AddressEntity alloc] init] autorelease];  
      29.     address3.Id = 3;  
      30.     address3.address = @"china3";  
      31.       
      32.     NSArray *addresses = [[NSArray alloc] initWithObjects:address2, address3 , nil];  
      33.       
      34.     userEntity.addresses = addresses;  
      35.       
      36.     [archiver encodeObject:userEntity forKey:@"KEY"];  
      37.     [archiver finishEncoding];  
      38.     BOOL success = [data writeToFile:filePath atomically:YES];  
      39.       
      40.       
      41. }  
      42.   
      43. -(IBAction)read:(id)sender  
      44. {  
      45.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
      46.     NSString *documentsDirectory = [paths objectAtIndex:0];  
      47.       
      48.     NSString *filePath = [documentsDirectory stringByAppendingPathComponent:k_FILE_NAME];  
      49.       
      50.     NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];  
      51.       
      52.     NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];  
      53.     UserEntity *userEntity = [unArchiver decodeObjectForKey:@"KEY"];  
      54.     NSLog(@"name is %@ , friend %@ address :%@ , addresses is :%@", userEntity.userName , userEntity.friends , userEntity.address, userEntity.addresses);  
      55.       
      56. }  
  • 相关阅读:
    【你的职业规划】web前端的职业发展方向及学习攻略【转载】
    开发人员如何高效编程【转载】
    微信小程序开发——以简单易懂的浏览器页面栈理解小程序的页面路由
    微信小程序开发——超链接或按钮点击跳转到其他页面失效
    小程序开发常见异常收集整理
    微信小程序开发——开发者工具无法输入中文的处理
    微信小程序开发——前端如何区分小程序运行环境
    微信小程序开发——setData的使用技巧
    微信小程序开发——打开另一个小程序
    微信小程序开发——全局配置详细介绍
  • 原文地址:https://www.cnblogs.com/apem/p/4340152.html
Copyright © 2020-2023  润新知