我的應用程序需要存儲機場列表。該列表需要手動設置,即它不是來自Web服務。在iPad上存儲數據
我想創建一個核心數據數據庫,然後自己輸入這個列表。這個核心數據庫隨後將附帶應用程序。
你會推薦其他方法嗎?我是否應該使用XML文件或其他方式來做到這一點?
我的應用程序需要存儲機場列表。該列表需要手動設置,即它不是來自Web服務。在iPad上存儲數據
我想創建一個核心數據數據庫,然後自己輸入這個列表。這個核心數據庫隨後將附帶應用程序。
你會推薦其他方法嗎?我是否應該使用XML文件或其他方式來做到這一點?
您可以使用plist。
在不使用核心數據的情況下很容易保存字符串或其他數據的列表。
參見Property List Programming Guide
例如,該代碼將節省的對象(rootObj),其可以是一個數組或字典:
NSString *error;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"yourFile.plist"];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:rootObj
format:NSPropertyListXMLFormat_v1_0
errorDescription:&error];
if(plistData) {
[plistData writeToFile:plistPath atomically:YES];
}
else {
NSLog(@"Error : %@",error);
[error release];
}
上有支持的類的一些限制(見指南)
Plist是數據有限的一個很好的選擇,但是如果你有很多數據,你應該使用數據庫。它們很好,可靠且易於處理。變化可以在各種平板上輕鬆和健壯地進行。主要他們有兩種方法
CheckandcretaeDatabase
InitialiseDatabase
(無效)CheckandcreateDatabase
{
BOOL成功;
NSFileManager * fileManager = [NSFileManager defaultManager];
NSError * error; (NSDocumentDirectory,NSUserDomainMask,YES);或者,NSArray *路徑= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);否則,NSArray *路徑= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * writableDBPath = [documentsDirectory stringByAppendingPathComponent:@「A.sqlite」];
成功= [fileManager fileExistsAtPath:writableDBPath];
if(success)return; //可寫數據庫不存在,所以將默認值複製到適當的位置。 NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@「A.sqlite」];
成功= [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath錯誤:&錯誤];
if(!成功) {
NSAssert1(0,@「無法創建包含消息'%@'的可寫數據庫文件。」,[error localizedDescription]); }
}
的NSArray *路徑= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * path = [documentsDirectory stringByAppendingPathComponent:@「AutoGraphics.sqlite」];
如果(sqlite3_open([路徑UTF8字符串],&數據庫)== SQLITE_OK)
{
//的NSLog(@ 「OK」);
}
別的
{
sqlite3_close(數據庫); (0,@「無法打開帶有消息'%s'的數據庫'」,sqlite3_errmsg(database));
}
}
在此之後ü可以方便查詢的幫助下,通過讀取數據庫UR值。
=>第二種方法是將您的整個數據存儲在本地XML文件中,並根據您的需要解析它們以找出數據。它也很容易。
決定你的需求和你的熟練程度。
這一切都取決於您期望獲得的數據量。 少量,絕對使用plists - 省去設置數據庫的麻煩,您需要大量數據庫或者需要關係不同類型的數據。