【问题标题】:Objective-c: giving up on Core Data, SQlite3 - going with .plist. Am I wrong?Objective-c:放弃 Core Data,SQlite3 - 使用 .plist。我错了吗?
【发布时间】:2013-02-18 18:41:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: objective-c database core-data plist


    【解决方案1】:

    不要使用 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'"];

    然后使用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 下设计数据库布局的所有工作。只需包装访问部分。有关语法的更多信息,请参阅 github 页面上的 FMDB 的自述文件

    【讨论】:

    • 感谢您的好评!对 CoreData 的工作原理有简单的解释吗?就像类/对象的破车/工厂类比?还是那些事情无法简单解释?
    • 我不知道简单化的解释。那里的大多数教程都试图涵盖太多,因此变得相当复杂。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 2020-04-21
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      相关资源
      最近更新 更多