吳君曉,女,寧波大紅鷹學(xué)院 2008級計算機科學(xué)與技術(shù)專業(yè)學(xué)生
項目基金:浙江省2010年度大學(xué)生科技創(chuàng)新活動項目(新苗計劃),項目編號:2010R423002
摘要:以地址簿應(yīng)用程序為原型,對基于iPhone的應(yīng)用程序開發(fā)進行了有益的探索, 解析了iPhone開發(fā)中的多視圖開發(fā)以及數(shù)據(jù)持久存儲等基本問題,探討了基于iPhone應(yīng)用程序開發(fā)的基本流程,對基于移動平臺的應(yīng)用程序?qū)崿F(xiàn)有一定的借鑒作用。
關(guān)鍵詞:iPhone 地址簿 應(yīng)用程序開發(fā)
中圖分類號: TP311 文獻標(biāo)識碼:A 文章編號:1674-098X(2011)10(b)-0000-00
1 引言
第三代移動通信技術(shù)(3rd-generation,3G)的高速數(shù)據(jù)下載能力,以及終端應(yīng)用程序的需求,促使了手機應(yīng)用程序開發(fā)的快速發(fā)展。具有特定功能的應(yīng)用程序?qū)τ谟脩魜碚f更有用,更方便。用戶只需打開終端的相應(yīng)應(yīng)用程序自動捕獲信息,而不用打開瀏覽器來主動搜索獲得信息?;趇Phone的手機應(yīng)用程序也與日俱增,憑借iPhone 完美的用戶體驗性能,使得iPhone手機應(yīng)用程序有極其廣闊的使用群體。
為探索iPhone平臺下應(yīng)用程序開發(fā)的機制,作者按照浙江省2010年度大學(xué)生新苗計劃項目的要求,以地址簿應(yīng)用程序為原型,對基于iPhone的應(yīng)用程序開發(fā)進行的有益的探索。
地址簿應(yīng)用程序以提供快捷方便的方式來存儲聯(lián)系人信息。地址簿信息是所有應(yīng)用共享的非常重要的資源,使電話通訊、收發(fā)郵件、短信這樣的基本交互變得簡單,并允許其他的應(yīng)用程序訪問該表獲取相關(guān)信息。本文對iPhone開發(fā)過程中的多視圖開發(fā)、數(shù)據(jù)持久存儲等基本問題進行了解析,并探討了基于iPhone應(yīng)用程序開發(fā)的基本流程。
2 iPhone開發(fā)平臺簡介
iPhone基于SDK開發(fā),采用Objective-C語言和Xcode開發(fā)環(huán)境,開發(fā)的應(yīng)用程序運行在iPhone模擬器上。iPhone模擬器基本支持模擬真機上的所有功能,包括旋轉(zhuǎn)、搖晃等物理功能。
Objective-C是擴充C的面向?qū)ο缶幊陶Z言,可以在支持gcc運作的系統(tǒng)上編寫代碼和編譯,同時又可以與c/c++混合編程。iPhone開發(fā)采用Cocoa快速開發(fā)框架。Cocoa框架最大程度的幫助開發(fā)人員開發(fā)出功能強大的軟件。Cocoa Frameworks包含以下兩個子框架:Foundation 和UIKit。
3 系統(tǒng)的設(shè)計與實現(xiàn)
3.1 功能模塊
地址簿應(yīng)用程序包括了查詢聯(lián)系人詳細信息、添加新聯(lián)系人、刪除聯(lián)系人等基本功能模塊。在主界面上,按字母順序排列聯(lián)系人列表,用戶可以滾動查看聯(lián)系人。觸摸聯(lián)系人的名字將顯示這個聯(lián)系人的詳細信息。觸摸應(yīng)用程序右上角的添加聯(lián)系人按鈕添加一個新的聯(lián)系人。觸摸左上角的修改聯(lián)系人按鈕可以實現(xiàn)選擇刪除聯(lián)系人。
3.2 總體設(shè)計
地址薄應(yīng)用程序使用表視圖(UITableView)并復(fù)用UITableViewCells顯示聯(lián)系人列表,使用導(dǎo)航控制器實現(xiàn)添加、查看、修改視圖和主視圖間的切換。導(dǎo)航控制器通過一個視圖控制器棧來維護視圖的導(dǎo)航,當(dāng)需要顯示某視圖,則壓棧該視圖的控制器,當(dāng)前的視圖控制器出棧,則下一個視圖成為當(dāng)前視圖。
iPhone視圖的規(guī)則是:一個窗口(UIWindow),多個視圖(UIView)。即只允許一個應(yīng)用程序只有一個窗口。每個視圖通常都擁有一個視圖控制器。視圖控制器(UIViewController)管理著UIViews相應(yīng)的表視圖控制器(UITableViewController)管理著UITableView。視圖控制器不是視圖,它們是沒有可視化表示的抽象類。視圖控制器集中進行視圖管理,包括管理頁面的生命周期,設(shè)置視圖的外觀和它顯示的子視圖,響應(yīng)正在顯示或消失的視圖。
3.3 UI設(shè)計
地址薄應(yīng)用程序創(chuàng)建一個基于Navigation—Based Application模板的多視圖項目。用戶主要通過IB(Interface Builder)程序來創(chuàng)建和編輯nib文件來設(shè)計界面。iPhone 操作系統(tǒng)提供了非常出色的UI庫以供用戶進行可視化設(shè)計,但不會產(chǎn)生任何維護的代碼。也可以通過代碼來實現(xiàn)界面的設(shè)計工作,或者繼承已有的視圖或控件。
地址薄應(yīng)用程序主要的界面設(shè)計工作都是通過代碼來實現(xiàn)的:
(1) 為導(dǎo)航欄添加按鈕以便通過一個導(dǎo)航欄在多層視圖之間切換。所有的UIViewControllers都擁有一個UINavigationController類型的NavigationController的屬性。UINavigationItems包含用來在應(yīng)用程序屏幕間導(dǎo)航的按鈕。在導(dǎo)航欄上添加一個添加按鈕來實現(xiàn)導(dǎo)航只添加新聯(lián)系人視圖:
UIBarButtonItem *plusButton=[[UIButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self
action:@selector(addContact)];
self.navigationItem.rightBarButtonItem=plusButton;
地址簿應(yīng)用程序?qū)Ш綑谥羞€包含了返回、修改等Items,其放置位置只能是導(dǎo)航欄的左側(cè)或右側(cè)。
(2) 在每個聯(lián)系人窗格右側(cè)添加一個顯示聯(lián)系人按鈕實現(xiàn)導(dǎo)航到詳細信息視圖。
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
(3) 復(fù)用UITableViewCells節(jié)約內(nèi)存。當(dāng)翻閱一長串的聯(lián)系人時,在任何時候只有有限數(shù)量的聯(lián)系人可以出現(xiàn)在屏幕上。我們可以通過調(diào)用UITableView的dequeueReusableCellWithIdentifier:方法來重用那些不可見的UITableViewCells,而不是為要顯示的聯(lián)系人創(chuàng)建新的窗格。這樣可以節(jié)省內(nèi)存并提高應(yīng)用程序的性能。
3.4 數(shù)據(jù)持久性存儲
(1) 屬性列表訪問
持久性存儲就是某種形式存儲的非易失性存儲,這種存儲在設(shè)備應(yīng)用程序重啟時不會丟失數(shù)據(jù)。在許多的應(yīng)用程序中,需要持久存儲數(shù)據(jù),在用戶進行更改時能夠保存這些修改到某種形式。
地址簿應(yīng)用程序采用屬性列表訪問機制。屬性列表機制只要序列化特定的數(shù)據(jù)模型對象,就可以將字典(NSDictionary)和數(shù)組(NSArray)實例寫入屬性列表以及從屬性列表創(chuàng)建它們。
屬性列表機制都將考慮將數(shù)據(jù)存儲在一個文件中,還是存儲在多個文件中。使用單個文件存儲形式時,必須將全部的應(yīng)用程序數(shù)據(jù)加載到內(nèi)存中,并且將所有數(shù)據(jù)全部寫入文件系統(tǒng),即使更改再少也是如此。而多個文件存儲形式允許應(yīng)用程序僅加載用戶請求的數(shù)據(jù),但大大增加了應(yīng)用程序的復(fù)雜性。它當(dāng)用戶進行更改時,只需保存更改的文件。此方法允許開發(fā)人員在收到內(nèi)存不足通知時釋放內(nèi)存。一般情況下,會選擇單個文件存儲,因為已足夠滿足于一般的程序。
(2) 獲取存儲文件
屬性列表持久存儲機制使用iPhone的文件系統(tǒng)實現(xiàn),持久性存儲文件都存儲在應(yīng)用程序的/Doucement文件夾。每個程序都有自己的/Doucement文件夾,并且應(yīng)用程序僅能讀取各自的/Doucement文件夾目錄中的內(nèi)容。應(yīng)用程序?qū)?shù)據(jù)存儲在/Doucement中。不管使用什么機制實現(xiàn)持久數(shù)據(jù)存儲,只要是采用文件系統(tǒng)實現(xiàn),都要獲取存儲文件路徑。
獲取/Doucement目錄:檢索/Doucement目錄的完整路徑以便讀取和寫入文件。使用C函數(shù)的NSSearchPathForDirectoriesInDomain來查找各種目錄,它是Foundation函數(shù),因此可以在Cocoa框架中應(yīng)用。
獲取文件夾路徑:
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
獲取存儲文件路徑:使用stringByAppendingPathComponent方法追加存儲文件名,以獲得存儲的完整路徑。通常還會添加NSFileManager對象檢測數(shù)據(jù)存儲文件是否存在,如果存在則初始化,若不存在則新建。
filePath = [[NSString alloc] initWithString:
[directory stringByAppendingPathComponent:@\"contacts\"]];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:filePath])
contacts = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
else // else initialize contacts as empty NSMutableArray
contacts = [[NSMutableArray alloc] init];
(3) 數(shù)據(jù)訪問
許多應(yīng)用程序都使用了屬性列表,盡管可以讓任何對象序列化,但只能將這些對象放置到某個集合類(主要NSDictionary和NSArray)中,然后使用該集合類的writeToFile:atomically:方法將它們存儲到屬性列表。地址簿應(yīng)用程序使用單個文件實現(xiàn)持久性存儲,首先創(chuàng)建一個根對象,通常是NSArray或NSDictionary。接下來,使用所有需要保存的程序數(shù)據(jù)填充根對象。需要保存時,代碼會將該根對象的全部內(nèi)容重新寫入單個文件。應(yīng)用程序在啟動時會將該文件的全部內(nèi)容讀入內(nèi)存,并在退出時注銷全部內(nèi)容。程序中使用鍵/值編碼對對象和本地數(shù)據(jù)類型進行讀取和寫入。當(dāng)應(yīng)用程序管理的數(shù)據(jù)只有幾兆字節(jié)時,將會非常簡單。
讀取:
NSString *name = [[contacts objectAtIndex:indexPath.row] valueForKey:@\"Name\"];
寫入:
[contacts addObject:person];
[contacts writeToFile:filePath atomically:NO];
4 存在的問題及解決方案
4.1 存在的問題
在本項目中對數(shù)據(jù)的存儲采用列表存儲方式,雖然減小了程序,但是不能滿足大量的數(shù)據(jù)存儲和數(shù)據(jù)檢索等問題。但是對于數(shù)據(jù)的存儲和檢索數(shù)據(jù)存在一定的缺陷。Core Data以其數(shù)據(jù)模型編輯器幫助完成所有文件的系統(tǒng)管理工作。
4.2 解決方案
持久存儲數(shù)據(jù)可以使用多種不同的機制數(shù)進行數(shù)據(jù)持久存儲在iPhone上設(shè)備上,主要采用以下四種機制:屬性列表機制,對象歸檔機制,iPhone的嵌入式數(shù)據(jù)庫(SQLite3機制,以及蘋果公司提供的持久性工具Core Data機制。
經(jīng)比對研究,確定在地址簿應(yīng)用程序的基礎(chǔ)上,采用Core Data作為持久存儲機制實現(xiàn)記事本的添加、修改、刪除、查看等基本數(shù)據(jù)訪問功能模塊。Core Data使用其數(shù)據(jù)模型編輯器幫助程序完成所有存儲文件的系統(tǒng)管理工作。
Core Data是一種在關(guān)系數(shù)據(jù)庫和面向?qū)ο蟮木幊陶Z言中間實現(xiàn)對象關(guān)系映射(ORM)的解決工具。Core Data是一款穩(wěn)定、功能全面的持久性工具,本質(zhì)上是采用嵌入式關(guān)系庫SQLite3作為存儲文件。
在新建應(yīng)用程序時,需選中”Use Core Data for Storage”的復(fù)選框,則在項目 Resource文件中產(chǎn)生了一個新的文件:Core_Data_Persistence.xcdatamodel數(shù)據(jù)模型編輯器。數(shù)據(jù)模型編輯器負責(zé)管理所有文件的系統(tǒng)管理工作。
5 結(jié)語
本文通過地址簿應(yīng)用程序的開發(fā),探索研究基于iPhone開發(fā)應(yīng)用程序的完整流程,形成了Apple OS平臺下iPhone應(yīng)用程序開發(fā)流程文檔。通過探索和實踐,不僅可以為今后需要在iPhone等移動開發(fā)平臺上開發(fā)應(yīng)用程序提供幫助,也為基于iPhone應(yīng)用程序二次開發(fā)建立基礎(chǔ)。在理解和開發(fā)地址簿應(yīng)用程序的前提下,基于iPhone的應(yīng)用程序開發(fā)得到實踐和驗證。
參考文獻
[1] A.Hamou, S.Guy,B.Lewden, A.Bilyea, F. Gwadry-Sridhar, M. Bauer.Data collection with iPhone Web apps efficiently collecting patient data using mobile devices[A]. 2010 IEEE International Conference[C].235-239.
[2] Apple Inc.Core Data Programming Guide[EB/OL]. http://developer.apple.com/ library/ios/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html.2010-11-15.
[3] 徐俊.基于iPhone 平臺的電子連環(huán)畫交互系統(tǒng)設(shè)計與實現(xiàn)[J].包裝工程. 2011(04). 45-48.
[4] Low D, Pittaway A. The 'iPhone' induction - a novel use for the Apple iPhone. Pediatric Anesthesia 2010;18:573-4.