2010-10-29 118 views
1

我的應用程序需要存儲機場列表。該列表需要手動設置,即它不是來自Web服務。在iPad上存儲數據

我想創建一個核心數據數據庫,然後自己輸入這個列表。這個核心數據庫隨後將附帶應用程序。

你會推薦其他方法嗎?我是否應該使用XML文件或其他方式來做到這一點?

回答

2

您可以使用plist。
在不使用核心數據的情況下很容易保存字符串或其他數據的列表。
參見Property List Programming Guide

例如,該代碼將節省的對象(r​​ootObj),其可以是一個數組或字典:

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]; 
} 

上有支持的類的一些限制(見指南)

2

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]); }

}

  • (無效)initializeDatabase {

的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文件中,並根據您的需要解析它們以找出數據。它也很容易。

決定你的需求和你的熟練程度。

5

這一切都取決於您期望獲得的數據量。 少量,絕對使用plists - 省去設置數據庫的麻煩,您需要大量數據庫或者需要關係不同類型的數據。