【问题标题】:SQLite Access in Objective-C and CocoaObjective-C 和 Cocoa 中的 SQLite 访问
【发布时间】:2010-12-06 03:47:15
【问题描述】:

我正在学习用于 Mac/iPhone 开发的 Objective-C,并决定尝试编写一些有用的东西而不看圣经(Aaron Hillegass:Cocoa Programming 第 3 版)。

我正在编写一个简单的益智游戏。定义关卡的数据以字符串形式存储在 SQLite 数据库中,并使用以下代码读入关卡对象:

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

我还有另外两行从数据库中读取其他属性(这次是整数,而不是字符串),它们工作正常,所以我想知道是否有人可以帮助我解决这个问题。

当这行代码执行时,我收到以下错误: *** +[NSString stringWithUTF8String:]: NULL cString

如果您能提供任何帮助,我将不胜感激。如果您需要更多信息,我很乐意提供。

谢谢!

【问题讨论】:

  • 您是否考虑过使用 FMDB 或 PLDatabase -- 两者都是不错的 SQLite 包装器?

标签: objective-c cocoa macos sqlite nsstring


【解决方案1】:

不是一个真正的答案,但是当有一些很好的包装器可用时,没有充分的理由直接处理 sqlite:

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

【讨论】:

  • 不使用包装器的原因有两个。首先,似乎有很多,我不知道哪个好哪个坏,这取决于我没有编写的代码,这很烦人。此外,我认为数据库访问在任何语言中都是一项相当必要的技能,因此我认为为 Objective-C 学习它是一个好主意。我可能会尝试一个包装器。
  • 与其说是好或坏的代码,不如说是关于 sqlite 的基本样板代码。它已经完成了很多次,以至于你自己重做它需要更多的时间,而不仅仅是找到一个像样的包装器,这样你就可以专注于你的应用程序和 sql。
【解决方案2】:

很可能是compiledStatement 中的错误。一般来说,您应该首先检查您是否从sqlite3_column_text 获得了实际值,因为返回NULL 通常是对您要求的“正确”响应。

【讨论】:

  • 编译后的语句非常简单,适用于我正在检索的其他两条数据。在第 1 列中有字符串数据,因此如果返回其他数据,则应返回它。返回记录的一部分而不返回其他部分是没有意义的。
  • 无论如何,如果问题不在于compiledStatement,那么它只是在您的通话中的其他地方。您确定第 1 列中有一个字符串吗?您是否在终端中使用 sqlite3 检查过数据库?如果它在那里,那么我认为我们将需要查看更多代码,因为它可能与 sqlite3 上下文有关。
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多