2013-02-18 65 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遷移。