zoukankan      html  css  js  c++  java
  • NSCoding相关

    通过NSCoding能实现像JAVA一样能够实现对象的序列化,可以保存对象到文件里。

     写了个小demo验证了下。

     直接上demo吧。

     UserEntity


    View Code
    //
    //  UserEntity.m
    //  NSCodingDemo
    //
    //  Created by   on 11-5-20.
    //  Copyright 2011  , Inc. All rights reserved.
    //

    #import 
    "UserEntity.h"
    #import 
    "AddressEntity.h"

    #define SAMPLEDATA_KEY_USERNAME (@"userName")  
    #define SAMPLEDATA_KEY_GENDER (@"gender")  
    #define SAMPLEDATA_KEY_AGE (@"age")
    #define k_FRIENDS (@"frinds")
    #define k_ADDRESS (@"address")
    #define k_userEntity_addresses (@"addresses")

    @implementation UserEntity
    @synthesize userName 
    = _userName;
    @synthesize gender   
    = _gender;
    @synthesize age      
    = _age;
    @synthesize friends  
    = _friends;
    @synthesize address  
    = _address;
    @synthesize addresses 
    = _addresses;

    -(void)dealloc
    {
        [self.userName release];
        [self.friends release];
        [self.address release];
        [self.addresses release];
        [super dealloc];
    }

      
    - (void)encodeWithCoder:(NSCoder*)coder  
      {  
          [coder encodeObject:self.userName forKey:SAMPLEDATA_KEY_USERNAME];
          [coder encodeInt:self.age forKey:SAMPLEDATA_KEY_AGE];
          [coder encodeBool:self.gender forKey:SAMPLEDATA_KEY_GENDER];
          [coder encodeObject:self.friends forKey:k_FRIENDS];
          [coder encodeObject:self.address forKey:k_ADDRESS];
          [coder encodeObject:self.addresses forKey:k_userEntity_addresses];
      }  

      
    - (id)initWithCoder:(NSCoder*)decoder  
      {  
          
    if (self = [super init])
          {
              
    if (decoder == nil)
              {
                  
    return self;
              }
              self.userName 
    = [decoder decodeObjectForKey:SAMPLEDATA_KEY_USERNAME];
              self.gender 
    = [decoder decodeBoolForKey:SAMPLEDATA_KEY_GENDER];
              self.age 
    = [decoder decodeIntForKey:SAMPLEDATA_KEY_AGE];
              self.friends 
    = [decoder decodeObjectForKey:k_FRIENDS];
              self.address 
    = [decoder decodeObjectForKey:k_ADDRESS];
              self.addresses 
    = [decoder decodeObjectForKey: k_userEntity_addresses];
          }
          
    return self;
      } 

    @end

     AddressEntity

    View Code
    //
    //  AddressEntity.m
    //  NSCodingDemo
    //
    //  Created by   on 11-5-20.
    //  Copyright 2011  , Inc. All rights reserved.
    //

    #import 
    "AddressEntity.h"
    #define k_Id (@"id")  
    #define k_AddresEntity_address (@"addrss")  


    @implementation AddressEntity
    @synthesize Id, address;
    -(void)dealloc
    {
        [self.address release];
        [super dealloc];
    }
    - (NSString *)description
    {

        
    return [NSString stringWithFormat:@"id :%d address: %@" , self.Id, self.address];
    }

    - (void)encodeWithCoder:(NSCoder*)coder  
    {  
        [coder encodeObject:self.address forKey:k_AddresEntity_address];
        [coder encodeInt:self.Id forKey:k_Id];

    }  

    - (id)initWithCoder:(NSCoder*)decoder  
    {  
        
    if (self = [super init])
        {
            
    if (decoder == nil)
            {
                
    return self;
            }
            self.address 
    = [decoder decodeObjectForKey:k_AddresEntity_address];
            self.Id 
    = [decoder decodeIntForKey:k_Id];

        }
        
    return self;

    @end

    测试代码

    View Code
    -(IBAction)write:(id)sender
    {
        
    //get document path
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString 
    *documentsDirectory = [paths objectAtIndex:0];
        
        NSString 
    *filePath = [documentsDirectory stringByAppendingPathComponent:k_FILE_NAME];
        
        NSMutableData 
    *data = [[[NSMutableData alloc] init] autorelease];
        NSKeyedArchiver 
    *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];
        UserEntity 
    *userEntity = [[[UserEntity alloc] init] autorelease];
        userEntity.age 
    = 18;
        userEntity.gender 
    = NO;
        userEntity.userName 
    = @"add";
        
        NSArray 
    *friends = [[NSArray alloc] initWithObjects:@"ac"@"2"@"3"@"4", nil];
        userEntity.friends 
    = friends;
        
        AddressEntity 
    *address = [[[AddressEntity alloc] init] autorelease];
        address.Id 
    = 1;
        address.address 
    = @"china";
        userEntity.address 
    = address;
        
        AddressEntity 
    *address2 = [[[AddressEntity alloc] init] autorelease];
        address2.Id 
    = 2;
        address2.address 
    = @"china2";
        
        AddressEntity 
    *address3 = [[[AddressEntity alloc] init] autorelease];
        address3.Id 
    = 3;
        address3.address 
    = @"china3";
        
        NSArray 
    *addresses = [[NSArray alloc] initWithObjects:address2, address3 , nil];
        
        userEntity.addresses 
    = addresses;
        
        [archiver encodeObject:userEntity forKey:
    @"KEY"];
        [archiver finishEncoding];
        BOOL success 
    = [data writeToFile:filePath atomically:YES];
        
        
    }

    -(IBAction)read:(id)sender
    {
        NSArray 
    *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString 
    *documentsDirectory = [paths objectAtIndex:0];
        
        NSString 
    *filePath = [documentsDirectory stringByAppendingPathComponent:k_FILE_NAME];
        
        NSData 
    *data = [[NSData alloc] initWithContentsOfFile:filePath];
        
        NSKeyedUnarchiver 
    *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        UserEntity 
    *userEntity = [unArchiver decodeObjectForKey:@"KEY"];
        NSLog(
    @"name is %@ , friend %@ address :%@ , addresses is :%@", userEntity.userName , userEntity.friends , userEntity.address, userEntity.addresses);
        
    }
    //







    @implementation AddressEntity
    )dealloc
    {
        [self.address release];
        [super dealloc];
    )description
     , self.Id, self.address];
    )coder  
    {  
        [coder encodeObject:self.address forKey:k_AddresEntity_address];
        [coder encodeInt:self.Id forKey:k_Id];

    )decoder  
     [super init])
     nil)
     self;
            }
     [decoder decodeObjectForKey:k_AddresEntity_address];
     [decoder decodeIntForKey:k_Id];

     self;


    项目source

  • 相关阅读:
    NOIp199Cantor表
    NOIP2001数的计算
    NOIP2010排队接水
    普及组2006第三题jam的计数法
    2013提高组积木大赛
    洛谷1223排队接水
    9.3noip模拟赛第一题卡片
    2002普及组第四题过河卒
    细胞分裂(NOIP2009 普及组第三题)
    道路游戏(NOIP2009 普及组第四题)
  • 原文地址:https://www.cnblogs.com/likwo/p/2052048.html
Copyright © 2011-2022 走看看