萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> ios >> ios的文件加載和保存

ios的文件加載和保存

 

1、使用屬性列表保存對象:
在Cocoa中,與一類名為屬性列表的對象,常簡稱為plist。這些列表包含Cocoa知道如何操作的一組對象。具體來講,Cocoa知道如何將它們保存到文件中並進行加載。屬性列表類包括:NSArray,NSDictionary,NSString和NSData,以及它們的變體(Mutable)

 

  1. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  2. NSArray *array = [NSArray arrayWithObjects:@"First",  
  3.                               @"second",@"third",@"fourth",@"fifth",nil];  
  4. [array writeToFile:@"array.plist" atomically:YES];
  5.  

 

 

2、編碼對象
遺憾的是,無法總是將對象信息表示為屬性列表類。如果能將所有對象都表示為數組字典,我們就沒有必要使用自己的類了。所幸,Cocoa具備一種機制來將對象自身轉化為某種格式並保存到磁盤中。對象可以將它們的實例變量和其它數據編碼為數據塊,然後保存到磁盤中。遺憾將這些數據塊讀到內存中,並且還能基於保存的數據創建新對象。這個過程稱為編碼和解碼,或稱為序列化和反序列化。
    通過NSCoding協議,可以使用自己的對象實現相同功能,實現它的兩個方法: 
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
NSCoder是一個抽象類,定義一些有用的方法來在對象與NSData之間來回轉換。完全不需要創建新NSCoder,因為它事件上並無多大作用。但是我們實際上要使用NSCoder的一些具體子類來編碼和解碼對象。我們將使用其中兩個子類NSKeyedArchiver和NSKeyedUnArchiver.
下面是一個例子:
頭文件類BookObj.h的源碼:

 

 

  1. //  
  2. //  BookObj.h  
  3.   
  4. //  
  5.   
  6. #import <Cocoa/Cocoa.h>  
  7. @interface BookObj:NSObject<NSCoding>{  
  8.     NSString *bookName;  
  9.     NSString *author;  
  10. }  
  11.   
  12. @property (copy) NSString *bookName;  
  13. @property (copy) NSString *author;  
  14.   
  15.   
  16. -(id)initWithName:(NSString *)name  
  17.            author:(NSString *) au ;  
  18.  

 

實現類BookObj.m的源碼:


  1. //  
  2. //  BookObj.m  
  3.   
  4. //  
  5. #import "BookObj.h"  
  6.   
  7.   
  8. @implementation BookObj  
  9.   
  10. @synthesize bookName;  
  11. @synthesize author;  
  12. -(id)initWithName:(NSString *)name  
  13.            author:(NSString *) au{  
  14.     if (self = [super init]) {  
  15.         self.bookName = name;  
  16.         self.author = au;  
  17.     }  
  18.     return self;  
  19. }  
  20.   
  21. - (void)encodeWithCoder:(NSCoder *)aCoder{  
  22.     [aCoder encodeObject:self.bookName forKey:@"bookName"];  
  23.     [aCoder encodeObject:self.author    forKey:@"author"];  
  24. }  
  25. - (id)initWithCoder:(NSCoder *)aDecoder{  
  26.     if (self =[super init]) {  
  27.         self.bookName = [aDecoder decodeObjectForKey:@"bookName"];  
  28.         self.author = [aDecoder decodeObjectForKey:@"author"];  
  29.     }  
  30.     return self;  
  31. }  
  32.   
  33.   
  34. int main(int argc ,const char *argv[]){  
  35.     BookObj *bookObj = [[BookObj alloc] initWithName:@"iPhone編程指南"  
  36.                                               author:@"David"];  
  37.       
  38.     [NSKeyedArchiver archiveRootObject:bookObj toFile:@"bookObj.plist"];  
  39.     NSLog(@"Success to archive file bookObj.plist!");  
  40.     BookObj *bookOb =   [NSKeyedUnarchiver unarchiveObjectWithFile:@"bookObj.plist"];  
  41.       
  42.     NSLog(@"The book name is :%@",bookOb.author);  
  43.     return 0;  
  44. }  
  45. @end  

/==============================================================

下面镔哥具體介紹一下plist文件和NSCoding協議

 

在做iOS開發時,經常用到到plist文件,  那plist文件是什麼呢? 它全名是:Property List,屬性列表文件,它是一種用來存儲串行化後的對象的文件。屬性列表文件的擴展名為.plist ,因此通常被稱為 plist文件。文件是xml格式的。

 

Plist文件通常用於儲存用戶設置,也可以用於存儲捆綁的信息

 

1、創建項目Plistdemo

 

項目創建之後可以找到項目對應的plist文件,打開如下圖所示:

ios的文件加載和保存 三聯

在編輯器中顯示類似與表格的形式,可以在plist上右鍵,用源碼方式打開,就能看到plist文件的xml格式了。


2、創建plist文件。

 

 

按command +N快捷鍵創建,或者File —> New —> New File,選擇Mac OS X下的Property List

創建plist文件名為plistdemo。

 

 

 

打開plistdemo文件,在空白出右鍵,右鍵選擇Add row 添加數據,添加成功一條數據後,在這條數據上右鍵看到 value Type

copyright © 萬盛學電腦網 all rights reserved