<button id="u2w23"></button>

<tbody id="u2w23"><track id="u2w23"></track></tbody><dd id="u2w23"><track id="u2w23"></track></dd><button id="u2w23"><acronym id="u2w23"></acronym></button> <tbody id="u2w23"><noscript id="u2w23"></noscript></tbody>

  • <button id="u2w23"></button><li id="u2w23"><acronym id="u2w23"><cite id="u2w23"></cite></acronym></li>

  • ?

    iOS培訓之數據保持(二)

    作者:達內 更新時間:2014-06-17 11:59 來源:未知 點擊:
    模型對象歸檔: NSString、NSArray、NSData、NSDictionary都實現了NSCoding協議,可直接通過調用writeToFile歸檔。 但如果想保持對象類型的數據,則需要到該方法靈活實現。
    模型對象歸檔:
    NSString、NSArray、NSData、NSDictionary都實現了NSCoding協議,可直接通過調用writeToFile歸檔。
       但如果想保持對象類型的數據,則需要到該方法靈活實現。首先可將需歸檔的對象先實現NSCoding協議,重寫
     
    encodeWithCode方法和initWithCode方法,然后通過NSKeyedArchiver轉換為NSData,然后通過NSData的writeToFile方
     
    法寫入到文件,或者將轉換后的NSData放入到NSArray或NSDictionary中調用writeToFile寫入到文件便可實現包裝了自
     
    定義類型的數據和字典的歸檔;
       通過NSKeyedUnarchiver讀取歸檔文件到對象,或者通過NSArray的arrrayWithContentsOfFile或NSDictionary的
     
    dictionaryWithContentsOfFile到數組對象或字典,然后取出序列化過的自定義對象(即自定義對象的NSData形式),
     
    然后通過NSKeyedUnarchiver反歸檔到對象。
    根視圖控制器:
    #define kFilename @"archive" 
    #define kDataKey @"Data" 
    -(NSString *)dataFilePath 
     {
        NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        NSString *documentsDirectory=[paths objectAtIndex:0];         return [documentsDirectory 
     
    stringByAppendingPathComponent:kFilename]; 
     } 
     
    - (void)viewDidLoad 
     { 
        [super viewDidLoad]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:[self dataFilePath]]) 
    {
        NSMutableData *data=[[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]; 
        NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 
        BIDFourLines *fourlines=[unarchiver         decodeObjectForKey:kDataKey]; 
        [unarchiver finishDecoding]; 
        field1.text=fourlines.field1; 
        field2.text=fourlines.field2; 
        field3.text=fourlines.field3; 
        field4.text=fourlines.field4;
     
        UIApplication *app =[UIApplication sharedApplication];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector
     
    (applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app]; 
     
    -(void)applicationWillResignActive:(NSNotification *)notification;
        BIDFourLines *fourlines=[[BIDFourLines alloc] init];
        fourlines.field1=field1.text; 
        fourlines.field2=field2.text; 
        fourlines.field3=field3.text; 
        fourlines.field4=field4.text;
        NSMutableData *data=[[NSMutableData alloc] init]; 
        NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];//將archiver在
     
    收到編碼后數據自動轉為二進制寫到data 
        [archiver encodeObject:fourlines forKey:kDataKey];//以Data為鍵編碼 
        [archiver finishEncoding]; 
        [data writeToFile:[self dataFilePath] atomically:YES]; //將data寫入Documents中的archiver中。
    }
    /*
    writeToFile:
    這方法其實是寫到plist文件(生成plist文件中的一個檔)中的,根據官方文檔描述If the array’s contents are 
     
    all property list objects (NSString, NSData, NSArray, or NSDictionary objects), the file written by this 
     
    method can be used to initialize a new array with the class method arrayWithContentsOfFile: or the 
     
    instance method initWithContentsOfFile:. This method recursively validates that all the contained objects 
     
    are property list objects before writing out the file, and returns NO if all the objects are not property 
     
    list objects, since the resultant file would not be a valid property list.
    */
    模型對象:
     1 #pragma mark NSCoding
     2 -(void)encodeWithCoder:(NSCoder *)aCoder
     3 {
     4     [aCoder encodeObject:field1 forKey:kField1Key];
     5     [aCoder encodeObject:field2 forKey:kField2Key];
     6     [aCoder encodeObject:field3 forKey:kField3Key];
     7     [aCoder encodeObject:field4 forKey:kField4Key];
     8 }
     9  
    10 -(id)initWithCoder:(NSCoder *)aDecoder
    11 {
    12     if(self=[super init])
    13     {
    14         self.field1=[aDecoder decodeObjectForKey:kField1Key];
    15         self.field2=[aDecoder decodeObjectForKey:kField2Key];
    16         self.field3=[aDecoder decodeObjectForKey:kField3Key];
    17         self.field4=[aDecoder decodeObjectForKey:kField4Key];
    18     }
    19     return self;
    20 }
    21  
    22 #pragma mark NSCopying
    23 -(id)copyWithZone:(NSZone *)zone
    24 {
    25     BIDFourLines *copy=[[[self class] allocWithZone:zone] init];
    26     copy.field1=[self.field1 copyWithZone:zone];
    27     copy.field2=[self.field2 copyWithZone:zone];
    28     copy.field3=[self.field3 copyWithZone:zone];
    29     copy.field4=[self.field4 copyWithZone:zone];
    30     
    31     return copy;
    32 } 
    沙盒中的Documents文件夾生成archiver文件(無擴展名,加上.plist擴展名即可查看編碼后保存的數據內容)。
    其實,實現上面的功能并不復雜,大體的只有以上的步驟,算不上繁瑣,只要細心都不會出現什么問題的,所以學習技
     
    術要有一定的細心和信心,什么都可以做得很好的。 
    標簽:

    相關閱讀

    最新開班信息

    3G-IOS軟件工程師就業班
    北京潘家園中心 開課日期:9月29日
    3G-IOS軟件工程師就業班
    北京潘家園中心 開課日期:9月29日
    3G-IOS軟件工程師周末班
    北京潘家園中心 開課日期:9月29日
    3G-IOS軟件工程師周末班
    北京潘家園中心 開課日期:9月29日
    大香蕉99精品3线在线观看视频,亚洲欧美AV中文日韩二区91哥精品 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>