2009-10-12 51 views
1

我正在學習Mac/iPhone開發Objective-C的過程,並決定嘗試寫一些有用的東西而不看聖經(Aaron Hillegass:Cocoa Programming 3rd Edition)。Objective-C和Cocoa中的SQLite訪問

我正在寫一個簡單的益智遊戲。定義級別的數據被存儲爲串中的SQLite數據庫,並與這行代碼讀入級對象:

tempLevel.levelData = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 

我有其他兩行從數據庫中的其他屬性讀取(整數此時間,而不是字符串),他們工作正常,所以我想知道如果任何人都可以幫助我的問題。

當這行代碼執行我收到以下錯誤: *** + [NSString的stringWithUTF8String:]:NULL CSTRING

我將不勝感激任何幫助,您可以給。如果您需要更多信息,我會很樂意提供。

謝謝!

+0

你有沒有考慮使用FMDB或PLDatabase - 這兩個漂亮的SQLite包裝? – nall 2009-10-12 23:25:53

回答

2

不是一個真正的答案,但沒有很好的理由,當有可用的一些偉大的包裝直接處理源碼:

http://cocoaheads.byu.edu/resources/sqlite

+1

不使用包裝有兩個原因。首先看起來不少,而且我不知道哪些是好或壞,它取決於我沒有寫的令人討厭的代碼。 此外,我認爲數據庫訪問是任何語言中相當必要的技能,所以我認爲學習Objective-C是一個好主意。我可能會嘗試一個包裝。 – danpalmer 2009-10-13 06:21:30

+2

它不是很好或不好的代碼,因爲它是關於sqlite的基本樣板代碼。它已經完成了很多次,重做它自己將需要更多的時間,而不僅僅是找到一個體面的包裝,所以你可以專注於你的應用程序和SQL。 – pxl 2009-10-13 16:45:05

1

最有可能是在compiledStatement錯誤。總的來說,您應該首先檢查您是否從sqlite3_column_text得到實際值,因爲回覆NULL通常是對您要求的「正確」迴應。

+0

編譯的語句非常簡單,適用於我檢索的其他兩個數據。在第1列中有字符串數據,因此如果返回其他數據則應該返回。記錄的一部分被返回而沒有其他記錄是沒有意義的。 – danpalmer 2009-10-13 08:10:14

+0

無論如何,如果問題不在'compiledStatement'中,那麼它就在你的調用中的其他地方。你確定第一列有一個字符串?你有沒有在終端中使用'sqlite3'檢查數據庫?如果它在那裏,那麼我認爲我們將需要看到更多的代碼,因爲它可能是sqlite3上下文中的其他東西。 – 2009-10-13 19:17:16