日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iphone 文件保存策略

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 文件保存策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。