0

我正在开发我的第一个 iOS 应用程序。它实际上是我最近编写的一个 Android 应用程序的一个端口。我真的偶然发现了数据库部分!

它是一个简单的数据库,为每一行存储几个字符串/整数。Android 上的 SQLite3 简直是小菜一碟!

我尝试过学习 Core Data、Core Data Stack、SQLite3 教程……这些东西是为不同版本的 XCode 编写的,不要使用垃圾收集、简单的拼写错误或太不熟悉。

我不希望存储超过 100K 的数据。我应该改用 XML/plist,还是 Core Data 值得花时间投资?

4

2 回答 2

3

快速的解决方案是像之前一样使用普通的 sqlite3。

Core Data 工作得很好,但它需要深入了解你在做什么,以及它是如何工作的。它为您提供了一些灵活性、自动迁移和许多其他功能。但它也包含很多你可以在腿上开枪的地方。

我在很多小事上遇到了麻烦。例如,从 v.1 -> v.2 自动迁移效果很好,v.2 -> v.3 也很有效。但它不能从 v.1 -> v.3 本身迁移。

于 2013-02-18T09:19:02.670 回答
3

不要使用 CoreData 来“从 sqlite 数据库中获取数据”。如果您需要“从 sqlite 数据库中获取数据”,请使用FMDB或类似工具。FMDB 是用于 iOS 的 sqlite3 的包装器。您应该能够直接复制您的select语句并将它们包装到 FMDB 中。

使用 CoreData 但用 SQL 语言思考只会造成混乱。如果您打算使用 CoreData,那么最好忽略 CoreData 使用 sqlite db 作为持久存储这一事实,并忘记您对 sql 语言的了解。

CoreData 是一个对象图框架而不是数据库接口。它碰巧默认将数据存储到 sqlite db,但从程序员的角度来看,使用是在对象方面。它不是在行和表方面。

回到 FMDB。在那里,打开一个数据库:

FMDatabase *theDatabase = [FMDatabase databaseWithPath:pathToDB];

select使用语句检索存储的行:

FMResultSet *setOfRows = [db executeQuery:@"select * from tableName where attribute = ?", @"some criteria'"];

然后使用 a 遍历检索到的行while

while ([setOfRows next]) {
    NSLog(@"%d %@ %@ %f", // simply print to the console
          [rs intForColumn:@"integerColumn"],
          [rs stringForColumn:@"attribute"],
          [rs dateForColumn:@"dateColumn"],
          [rs doubleForColumn:@"doubleValue"]); 
}

您应该能够保留在 android 下设计数据库布局的所有工作。只需包装访问部分。有关语法的更多信息,FMDB的 github 页面上有一个很好的自述文件

于 2013-02-18T10:41:56.313 回答