在iPad上存储数据

时间:2010-10-29 10:36:11

标签: iphone

我的应用需要存储机场列表。此列表需要手动设置,即它不是来自Web服务。

我正在考虑创建一个Core Data数据库,然后自己输入这个列表。然后,此核心数据库将随App一起提供。

您会推荐其他任何方法吗?我是否应该使用XML文件或其他方式来执行此操作?

3 个答案:

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

}

  • (无效)initializeDatabase {

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文件中,然后解析它们以根据您的需要查找数据。它也很容易。

决定您的需求和熟练程度。