gpt4 book ai didi

objective-c - sqlite数据库创建问题

转载 作者:行者123 更新时间:2023-12-03 19:06:56 26 4
gpt4 key购买 nike

我正在自学Objective-C,目前正在尝试找出如何将数据库集成到我的应用程序中。香港专业教育学院看过很多例子,论坛和教程,但没有奏效,我在做什么错?


大多数示例在应用程序中都带有[projectName] .sqlite db。如何添加?没有看到关于它如何最终出现在项目中的一种解释。
我已经创建了对象模型和类。我正在运行一种检查数据库是否存在的方法,如果不存在,它将创建数据库。我已经找到了几个使用不同路径的示例,但我不确定哪个正确。一些示例将我的项目文件的一部分复制到了document / mainDatabase.sqlite文件夹中!以下是正确的,如果是这样,为什么我会出错?


*由于未捕获的异常“ NSInternalInconsistencyException”而终止了应用程序,原因:“无法创建消息为“操作无法完成”的可写数据库文件。无此文件或目录'。

使用这些会导致上述错误,是的,defaultDBPath确实存在

defaultDBPath:
/ Users / myuser / Library / Application Support / iPhone Simulator / 4.2 / Applications / DFBAD921-CEBF-471E-B98B-04FDF2620146 / Documents

defaultDBPath:
/ Users / myuser / Library / Application Support / iPhone Simulator / 4.2 / Applications / DFBAD921-CEBF-471E-B98B-04FDF2620146 / Documents / mainDatabase.sqlite

writableDBPath:
/ Users / myuser / Library / Application Support / iPhone Simulator / 4.2 / Applications / DFBAD921-CEBF-471E-B98B-04FDF2620146 / dbProj12.app / mainDatabase.sqlit

- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence - we don't want to wipe out a user's DB
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentDirectory = [self applicationDocumentsDirectory];
NSLog(@"documentDirectory = %@", documentDirectory);
NSString *writableDBPath = [documentDirectory stringByAppendingPathComponent:@"iBountyHunter.sqlite"];

NSLog(@"defaultDBPath = %@", writableDBPath);
BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath];
if (!dbexits) {
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iBountyHunter.sqlite"];

NSLog(@"defaultDBPath = %@", defaultDBPath);
NSError *error;
BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}


}

期待你的回复。

最佳答案

我假设您使用的是CoreData,但是该解决方案对于每种数据库类型均有效。

该消息表明iBountyHunter.sqlite不存在,这是一个真实的消息:应该在XCode项目中添加db,并在构建应用程序时将其打包。

有些应用程序附带了一个已填充的数据库,可能是由开发人员在Mac上根据模拟器(甚至在开发设备)中创建的内容进行了修改。


在模拟器上构建并运行您的应用;
在设备上的Documents文件夹中查找并复制数据库;
编辑它添加自定义数据;
将数据库添加到XCode;
添加您报告的代码;
生成并让应用复制设备上已填充的数据库。

关于objective-c - sqlite数据库创建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5103730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com