iPhone模拟器中的SQLite数据库不刷新
Posted
技术标签:
【中文标题】iPhone模拟器中的SQLite数据库不刷新【英文标题】:SQLite database not refreshing in iPhone simulator 【发布时间】:2011-07-06 00:56:03 【问题描述】:所以我让 SQLite 数据库为我的应用程序工作。它从数据库中加载文本值,将其复制到数组中并在表格视图中显示。
我第一次启动时,我在星期二、星期四、星期六显示了值。然后,我使用 Firefox 的 SQLite Manager 插件(我也用它来创建它)通过添加新值来修改数据库。但是,新值没有显示,即使我删除了像星期六这样的值,同样的旧“星期二、星期四、星期六”仍然会再次出现。我很困惑。
注意事项:
我尝试重新启动 Xcode 甚至计算机,哈哈。 当我在 SQLite Manager 中修改数据库时,Xcode 中会刷新数据库文件的更新时间。 我的数据库管理,就像在教程中一样,发生在 AppDelegate 中。在 appdelegate: (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 我在开头有这段代码
routines = nil; // Reset array
database = nil; // not opened yet
selStmt = nil; // no compiled statement yet
updStmt = nil; // no compiled statement yet
我正在关注本教程并根据我的需要对其进行修改: http://technologyservants.com/index.php?option=com_content&view=article&id=46:shopping-list-an-iphone-sqlite-tutorial
【问题讨论】:
哈哈。您是否尝试拔下电源线并再次插入? =) 【参考方案1】:如果文档目录中尚不存在数据库,您可能会将数据库从应用程序包复制到文档目录中。
下次您运行您的应用程序(使用新数据库)时,您检查该数据库是否存在于用户的文档目录中,然后您可能不会再次复制它。您不是在比较数据库的版本,您只是在检查是否存在具有该名称的数据库。
如果您仍在开发中,一个简单的解决方案是清除重置模拟器的内容和设置,这将导致您的应用再次复制数据库。
【讨论】:
谢谢,重置成功。所以应用程序从目录中加载一次数据库。但是当我使用我的应用程序而不是外部源更新它时,数据库将正确更新(只是在捆绑包中,而不是“目录”)? 对,当你更新你的应用程序时,新的数据库在你的应用程序包中。但是该教程中的代码会检查 Documents 目录以查看是否已存在具有该名称的数据库。当它发现旧数据库仍然存在时,它不会复制新数据库。【参考方案2】:正如 Firoze 所说(我只是略读了教程,如果我错了,请原谅我)在第一次加载时,数据库会从包中复制到文档目录中。此后每次启动都无需复制数据库,因为它已经存在。
如果您正在使用模拟器并想要更改数据以便在您工作时实时反映您需要打开位于的数据库
/Users/<username>/Library/Application Support/iPhone Simulator/4.3.2/Applications/<app bundle identifier>/Documents/<database file>
该文件可能不在那个确切位置,但它让您知道从哪里开始查看
【讨论】:
以上是关于iPhone模拟器中的SQLite数据库不刷新的主要内容,如果未能解决你的问题,请参考以下文章
iPhone - 从手机复制 sqlite 文件以在模拟器中使用
当我使用 iPhone 运行项目时如何在 iOS 中使用 sqlite