Iphone 在设备上测试sqlite数据库应用程序

Iphone 在设备上测试sqlite数据库应用程序,iphone,sqlite,Iphone,Sqlite,我正在开发一个数据库应用程序,它可以在模拟器中正确地插入、更新、删除所有功能。我的问题始于尝试在iPhone上安装/运行应用程序 在初始运行时,程序在应用程序的documents目录中创建数据库的可编辑版本。当在应用程序包中找不到数据库时,我的测试失败。数据库已添加到XCode中的Resources文件夹中 检查数据库的现有版本以及多个NSLog语句,如果不存在则创建一个NSLog语句的代码如下: -NSString*createWriteableDatabase { BOOL数据库存在; n错

我正在开发一个数据库应用程序,它可以在模拟器中正确地插入、更新、删除所有功能。我的问题始于尝试在iPhone上安装/运行应用程序

在初始运行时,程序在应用程序的documents目录中创建数据库的可编辑版本。当在应用程序包中找不到数据库时,我的测试失败。数据库已添加到XCode中的Resources文件夹中

检查数据库的现有版本以及多个NSLog语句,如果不存在则创建一个NSLog语句的代码如下:

-NSString*createWriteableDatabase { BOOL数据库存在; n错误*错误

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *writeableDB = [documentsDir stringByAppendingPathComponent:@"flashCard.db"];

NSLog(@"writeableDB = '%@'.", writeableDB);

databaseExists = [fileManager fileExistsAtPath:writeableDB];

NSLog(@"databaseExists = %d.", databaseExists);

if (databaseExists)
    return writeableDB;

//--- Writeable version of database does not exist -- copy from bundled software. ---

NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] 
                         stringByAppendingPathComponent:@"flashCard.db"];

NSLog(@"defaultPath = '%@'.", defaultPath);

databaseExists = [fileManager fileExistsAtPath:defaultPath];

NSLog(@"databaseExists = %d.", databaseExists);

databaseExists = [fileManager copyItemAtPath:defaultPath toPath:writeableDB error:&error];

if (!databaseExists)
{
    NSAssert1(0, @"Failed to create writeable database file: '%@'.", [error localizedDescription]);
    return @"";
}

return writeableDB;
}

调试器中显示的消息如下:

警告:无法读取/XCode 3.2.5/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3 8J2/symbols/System/Library/AccessibilityBundles/AccessibilitySettingsLoader.bundle/AccessibilitySettingsLoader文件的符号。 2011-06-10 21:12:11.130 flashm[3768:707]writeableDB='/var/mobile/Applications/9DBC50B5-2559-4E6A-BD21-B5B56D9DA18A/Documents/flashCard.db'。 2011-06-10 21:12:11.144 flashm[3768:707]databaseExists=0。 2011-06-10 21:12:11.149 flashm[3768:707]defaultPath='/var/mobile/Applications/9DBC50B5-2559-4E6A-BD21-B5B56D9DA18A/flashm.app/flashCard.db'。 2011-06-10 21:12:11.154 flashm[3768:707]databaseExists=0。 2011-06-10 21:12:11.169 flashm[3768:707]*在-[DBAccess createWriteableDatabase]、/Users/marathoner1234/Projects/flashm/Classes//DBAccess中断言失败。m:92 2011-06-10 21:12:11.201 flashm[3768:707]*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“未能创建可写数据库文件:”操作无法完成。没有这样的文件或目录“”

提前感谢您给我的任何帮助,如果我的问题文本格式不正确,我深表歉意-这是我第一次在这个网站上提问


我查看了另外两个出现相同问题的问题,并检查了它们是否适用于我的情况,但它们不适用。

您的崩溃报告说您的数据库文件找不到您的文档目录。只有在资源文件夹中未正确安装数据库文件时,才会发生这种情况,因此,iphone设备上的程序无法读取您的数据库文件。

您可以发布捆绑包中的数据库文件的实际名称吗?在项目中保存数据库文件时,您是否对副本进行了检查标记。请检查此项。在设备中找不到数据库,因为它无法获取数据库。在模拟器上,它可以工作很好,因为它有引用。您还可以检查其他问题。这只是我的IDEA文件名,显示在参考资料文件夹中是flashcard.db。文件是在选中“将项目复制到目标组的文件夹(如果需要)”后添加的。我已经删除了这个文件并重新复制了它,但是没有用。正如我前面提到的,数据库被添加到了XCode中的Resources文件夹中。如果不是,它也不能在模拟器中正常运行。我还不能回答我自己的问题,但我发现了我的错误:我犯了一个突出的、愚蠢的错误——如果它是条响尾蛇,它早就咬了我。代码中指定的文件名为flashCard.db大写字母“C”;资源文件夹中的文件名为flashcard.db小写字母“c”。更改了代码中的文件名,问题已解决。谢谢所有添加评论的人。