我的应用需要存储机场列表。此列表需要手动设置,即它不是来自Web服务。
我正在考虑创建一个Core Data数据库,然后自己输入这个列表。然后,此核心数据库将随App一起提供。
您会推荐其他任何方法吗?我是否应该使用XML文件或其他方式来执行此操作?
答案 0 :(得分:5)
这一切都取决于您期望获得的数据量。 对于少量,肯定使用plists - 省去设置数据库的麻烦,你需要大量数据,或者你需要关系不同类型的数据。
答案 1 :(得分:2)
你可以使用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];
}
受支持的课程有一些限制(参见指南)
答案 2 :(得分:2)
Plist是数据有限的好选择,但是如果你有大量数据,你应该使用数据库。它们良好,可靠且易于操作。在各种平台上,变化可以轻松且稳健。主要是他们有两种方法
CheckandcretaeDatabase
InitialiseDatabase
(无效)CheckandcreateDatabase
{
BOOL成功;
NSFileManager * fileManager = [NSFileManager defaultManager];
NSError *错误;
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * writableDBPath = [documentsDirectory stringByAppendingPathComponent:@“A.sqlite”];
success = [fileManager fileExistsAtPath:writableDBPath];
如果(成功)返回; //可写数据库不存在,因此将默认值复制到适当的位置。
NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“A.sqlite”];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:& error];
if(!success) {
NSAssert1(0,@“无法创建带有'%@'消息的可写数据库文件。”,[error localizedDescription]); }
}
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * path = [documentsDirectory stringByAppendingPathComponent:@“AutoGraphics.sqlite”];
if(sqlite3_open([path UTF8String],& database)== SQLITE_OK)
{
//的NSLog(@ “OK”);
}
其他
{
sqlite3_close(数据库);
NSAssert1(0,@“无法打开带有'%s'消息的数据库。”,sqlite3_errmsg(数据库));
}
}
在此之后,你可以通过简单的查询在数据库中读取你的值。
=>第二种方法是将您的整个数据存储在本地XML文件中,然后解析它们以根据您的需要查找数据。它也很容易。
决定您的需求和熟练程度。