iphone开发中数据持久化之——属性列表序列化(一)
? ? ? ? ? 數(shù)據(jù)持久化是應(yīng)用程序開發(fā)過程中的一個(gè)基本問題,對(duì)應(yīng)用程序中的數(shù)據(jù)進(jìn)行持久化存儲(chǔ),有多重不同的形式。本系列文章將介紹在iphone開發(fā)過程中數(shù)據(jù)持久化的三種主要形式,分別是屬性列表序列號(hào)、對(duì)象歸檔化以及iphone的嵌入式關(guān)系數(shù)據(jù)庫(kù)SQLite。本文主要介紹屬性序列號(hào)的數(shù)據(jù)持久化方法。
? ? ? ? ?在許多應(yīng)用程序中都使用了屬性列表,比如使用屬性列表來指定應(yīng)用程序的首選項(xiàng),可以使用Xcode或Property List Editor來手動(dòng)編輯它們,并且只要字典或數(shù)組僅包含特定的可序列化對(duì)象,就可以使用NSDictionary和NSArray實(shí)例寫入屬性列表以及從屬性列表中來創(chuàng)建他們。盡管,可以讓任何對(duì)象序列化,但是智能將某些對(duì)象放置到某個(gè)集合類中(如NSDictionary或NSArray),然后使用該集合類的writeToFille::atomically方法將他們存儲(chǔ)到屬性列表中??梢孕蛄谢腛bjective-C對(duì)象有:NSArray、 NSMutableArray、NSDictionary、NSMultabableDictionary、NSData、NSMutableData、NSString、NSMutableString、NSNumber、NSDate等。
? ? ? ? 如果打算使用屬性列表持久保存應(yīng)用程序數(shù)據(jù),則可以使用NSArray或NSDictionary容納所需要持久保存的數(shù)據(jù)。假設(shè)存在NSArray或NSDictionary中的所有對(duì)象都是課序列化的對(duì)象,則可以通過對(duì)字典或數(shù)組實(shí)例調(diào)用writeToFile:atomically方法來編寫屬性列表。但是,屬性列表方法的一個(gè)突出問題就是無法將自定義對(duì)象序列化到屬性列表中,也不能使用通過Cocoa Touch交付且未在之前的可序列化對(duì)象列表中指定的其他類,這也意味著無法直接使用NSURL、UIImage和UIColor等類。
? ? ? ? ?下面通過實(shí)例來說明使用屬性列表實(shí)現(xiàn)數(shù)據(jù)持久方法。創(chuàng)建一個(gè)single view application應(yīng)用程序,在實(shí)現(xiàn)數(shù)據(jù)屬性序列化之前,首先要當(dāng)前應(yīng)用程序的路徑以及文件名,可以通過下面程序來獲得存儲(chǔ)文件的路徑和創(chuàng)建文件名。
?
- (NSString*)dataFilePath {NSArray* paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString* documentDirectory = [paths objectAtIndex:0];return [documentDirectory stringByAppendingPathComponent:kFilename]; }? ? ? ? ?接著,我們需要實(shí)現(xiàn)程序推出時(shí)對(duì)數(shù)據(jù)進(jìn)行持久化保存,也即存到文件中。此時(shí),我們需要實(shí)現(xiàn)一個(gè)通知方法:applicationWillTerminate。該方法有一個(gè)指向NSNotification的指針參數(shù)。通知是一種對(duì)象可以用于彼此通信的輕量級(jí)機(jī)制,類似MFC的消息機(jī)制。本程序?qū)崿F(xiàn)一個(gè)簡(jiǎn)單的序列化功能,主要是實(shí)現(xiàn)將一個(gè)textFiled控件的text內(nèi)容寫入文件中。該方法的實(shí)現(xiàn)代碼如下。
?
?
- (void)applicationWillTerminate:(NSNotification *)notification {NSMutableArray* array = [[NSMutableArray alloc]init];[array addObject:field1.text];[array addObject:field2.text];[array addObject:field3.text];[array addObject:field4.text];[array writeToFile:[self dataFilePath] atomically:YES]; }? ? ? ? 除此之外,應(yīng)用程序還需要做兩件事:一是檢查數(shù)據(jù)文件是否存在;二是如果文件存在,就用該文件的內(nèi)容實(shí)例化數(shù)組,并將數(shù)組數(shù)據(jù)賦給對(duì)應(yīng)的textFiled對(duì)象的text屬性。該功能可以在viewDidLoad方法中實(shí)現(xiàn),代碼如下:
- (void)viewDidLoad {// Do any additional setup after loading the view, typically from a nib.NSString* filePath = [self dataFilePath];if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]){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];}UIApplication* app = [UIApplication sharedApplication];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:app];[super viewDidLoad]; }? ? ? ? 從屬性列表加載數(shù)據(jù)之后,就獲得了對(duì)應(yīng)用程序的引用,并使用該引用訂閱UIApplicationiWillTerminateNotification,使用默認(rèn)的NSNotification實(shí)例以及一個(gè)名為addObserver:selector:name:object的方法。
?
? ? ? ? 實(shí)現(xiàn)結(jié)果如下所示:
該程序的源代碼可以通過一下鏈接下載:http://download.csdn.net/detail/kezunhai/6194277? ? ? ?
?
轉(zhuǎn)載于:https://www.cnblogs.com/suncoolcat/p/3297358.html
總結(jié)
以上是生活随笔為你收集整理的iphone开发中数据持久化之——属性列表序列化(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecCodes 学习 利用ecCode
- 下一篇: 智力杠杆