iphone 文件保存策略
iphone 文件保存策略
| 文件保存策略: 一般有三中方法:1,屬性列表,2,對象歸檔,3,iphone的嵌入式數據庫庫(sqLite3) ? 1,屬性列表 ? 存儲文件: //獲取文檔目錄,NSDocumentDirectory表示我們查找Documents目錄的路徑,NSUserDomainMask表示我們的搜索范圍只能在我們的應用程序沙盒當中, ? NSArray?*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,YES); //每個應用程序只有一個路徑,所以說我們可以從數組的0位置取得路徑 ?NSString?*documentDirectory=[path?objectAtIndex:0]; //在獲得的路徑當中生成一個theFile.txt文件,filename將包含theFile.txt的完整路徑 NSString *filename=[documentDirectorystringByAppendingPathComponent:@“theFile.txt"]; ?NSMutableArray?*array=[[NSMutableArray?alloc]?init]; ?[array?addObject:@"data1"]; ?[array?addObject:@"data2"]; ?[array?addObject:@"data3"]; ?[array?writeToFile:documentDirectory?atomically:YES]; ? 如果想獲取臨時文件的目錄可以使用下面的語句: NSString *tempPath=NSTemporaryDirectory(); ? ? 讀取文件: NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentdirectory=[path objectAtIndex:0]; ? ? ?if?([[NSFileManager?defaultManager]?fileExistsAtPath:?documentdirectory]) { ?NSArray?*array=[[NSArray?alloc]initWithContentsOfFile:filePath]; ?field1.text=[array?objectAtIndex:0]; ?field2.text=[array?objectAtIndex:1]; ?field3.text=[array?objectAtIndex:2]; ?field4.text=[array?objectAtIndex:3]; 屬性列表的問題是無法將自定義對象序列化到屬性列表中,也不能使用CocoaTouch交付,無法使用NSURL,UIImage和UIColor等。 ? ? 2,對象歸檔 ? 符合NSCoding,NSCoping,NSCopying是必須要符合的,NSCopying不是必須的,單符合NSCopying可以使你在使用數據模型時具備更多的靈活性。 ? NSCoding中申明了兩個方法,這兩個方法都是必須的,一個是將對象編碼到歸檔中,另一個是通過對歸檔編碼來創建一個新對象,兩個方法都傳遞一個NSCoder實例, ? -(void) encodeWithCoder:(NSCoder?*)aCoder{ ? ? ? } ? ? -(id)initWithCoder:(NSCoder?*)aDecoder{ ?if?(self=[super?init]) { ? ? ?} ? ?return?self; } ? ? //實現NSCopying ? -(id) copyWithZone:(NSZone?*)zone{ ? ?return?d; ? } ? ? 對數據進行歸檔 //創建一個NSMutableData實例,用來包含編碼的數據 NSMutableData *data=[NSMutableData alloc] init]; ? ? //創建一個歸檔對象,該歸檔對象將歸檔的數據儲存在data里 NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] ? [archiver encodeObject:myobject forKey:@"keyvalueString"]; ? //完成歸檔 [archiver finishEncoding]; ? //將data里面歸檔的數據寫入文件 ,寫入文件成功為Success,失敗時為No; Bool success=[data writetoFile:@"/path/to/archive" atomically:YES]; ? [archiver release]; ? [data release]; ? 對數據對象取消歸檔 ? ? //從歸檔文件創建一個NSData實例 ? NSData *data=[[NSData alloc] initWithContentsOfFile:path]; ? //創建一個NSKeyedUnarchiver,對數據進行解碼 NSIKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data]; ? //通過key值解碼對象 self.object=[unarchiver decodeObjectForKey:@"keyValueString"]; ? [unarchiver finishDecoding]; [unarchiver release]; [data release]; ? ? 3.SQLite3 ? 創建或打開數據庫 ? sqlite3 *database; ? //如果result等于常量SQLITE_OK,則表示已經打開(數據庫文件路徑必須作為C字符串處理) int result=sqlite3_open("/path/database/file",&database); ? char *errorMsg; const char *createSQL-"CREATE TABLE IF NOT EXITS PEOPLE(ID INTEGER PRIMARY KEY AUTOINCREMENT,FIELD_DATA TEXT)"; ? int result=sqlite3_exec(database,createSQL,NULL,NULL,&errorMsg); ? ? 關閉數據庫 sqlite3_close(database); ? |
轉載于:https://www.cnblogs.com/neworiginou/archive/2011/12/30/2307437.html
總結
以上是生活随笔為你收集整理的iphone 文件保存策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用 WebService实现远程服务器
- 下一篇: 《那些年啊,那些事——一个程序员的奋斗史