2013-02-18 42 views
0

我开发我的第一个iOS应用程序。它实际上是我最近编写的一个Android应用程序的端口。 我真的偶然发现数据库部分!Objective-c:放弃核心数据SQlite3 - 使用.plist。我错了吗?

这是一个简单的数据库,每行存储多个字符串/整数。 Android上的SQLite3是一块蛋糕!

我已经尝试过学习Core Data,Core Data Stack,SQLite3教程......事情是针对不同版本的XCode编写的,不要使用垃圾回收,普通的拼写错误或者太陌生。

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

回答

3

不要使用CoreData“从sqlite数据库中获取数据”。如果您需要“从sqlite数据库获取数据”,请使用FMDB或类似软件。 FMDB是iOS的sqlite3的一个包装。您应该能够将您的select声明正确地复制并包装到FMDB中。

使用CoreData但在SQL语言中思考只会造成混淆。如果您打算使用CoreData,那么最好不要理睬CoreData将sqlite数据库用作持久性存储并忘记了解SQL语言的所有知识。

CoreData是一个对象图框架而不是数据库接口。它恰好将数据存储到sqlite数据库作为默认值,但从程序员的角度来看,用法是以对象的形式表示的。它不是以行和表格的形式出现的。

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

FMDatabase *theDatabase = [FMDatabase databaseWithPath:pathToDB];

存储行与一个select语句检索:

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

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

然后通过检索到的行使用while迭代

你应该能够保留所有的工作在android下设计你的数据库布局。只需包装访问部分。有关语法的更多信息,请访问github页面,网址为FMDB

+0

感谢您的回复! CoreData是如何工作的简单解释?像类/物体的打车/工厂类比? 还是那些东西超出简单的解释? – selytch 2013-02-18 18:18:46

+0

我不知道简单的解释。那里的大多数教程都试图掩盖太多的方式,从而使其变得相当复杂。 – Olaf 2013-02-19 09:34:57

3

快速的解决方案是使用普通的sqlite3,就像你之前做的那样。

核心数据效果很好,但它需要深入理解你在做什么,以及它是如何工作的。它给你一些灵活性,自动迁移和许多其他功能。但它也包含很多地方,你可以在腿部拍摄自己。

我有许多小事情的麻烦。例如,从v.1 - > v.2自动迁移运行良好,v.2 - > v.3运行良好。但它本身不能从v.1 - > v.3迁移。