我是新手,请帮我解决这个问题,我还有很多其他工作要做,非常感谢你非常感谢!
How to use FMDB on the generic iOS device instead of simulator?之后的另一个问题 当我在我的设备上执行应用程序并且错误抛出时:“没有这样的表:学生信息”,我打印了所有路径并且它们都指向同一个文件,所以我假设数据库已经复制了?控制台显示如下:
file:///var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/
file:///var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/Data.db
/var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/Data.db
file:///var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/
file:///var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/Data.db
/var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/Data.db
/var/mobile/Containers/Data/Application/B5E42F3C-524E-4BBF-8667-1EED0C963A77/Documents/Data.db
<NSFileManager: 0x17401c1b0>
2017-03-13 16:43:25.446039 Test1.3[16360:5045427] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-03-13 16:43:25.457278 Test1.3[16360:5045427] [MC] Reading from public effective user settings.
Insert failed:
Optional("no such table: Student info")
Data.db
位于目标中的捆绑资源中;我设备中的内容为空Data.db
;
第二个问题:如果你看看上一个问题中的Utility.Swift
,虽然应用程序在模拟器上运行良好但在加载之后,应该有一个alertView说“你的数据库复制成功”,但它没有。以下是代码的一部分:
class func copyFile(_ fileName: NSString){
let dbPath: String = getPath(fileName as String)
let fileManager = FileManager.default
print(dbPath)
print(fileManager)
if !fileManager.fileExists(atPath: dbPath) {
let documentsURL = Bundle.main.resourceURL
let fromPath = documentsURL!.appendingPathComponent(fileName as String)
var error : NSError?
do {
try fileManager.copyItem(atPath: fromPath.path, toPath: dbPath)
}
catch let error1 as NSError {
error = error1
}
if(error != nil){
self.invokeAlertMethod("Error Occured", strBody: "\(error?.localizedDescription)" as NSString, delegate: nil)
}
else{
self.invokeAlertMethod("Successed", strBody: "Your database copy successfully", delegate: nil)
}
}
}
答案 0 :(得分:0)
首先尝试删除您的应用,然后重新安装。
OR
我在Swift中创建了一个基于FMDB的项目,您可以用它来解决您的问题。您也可以在Objective C项目中使用FMDB Wrapper类。
https://github.com/LalitKY/Swift-FMDB
希望这有帮助。
答案 1 :(得分:0)
好的回答这个问题我已经完成了你的演示。
我发现了几个错误。让我逐一介绍。
1)您的类Utility有一个getPath方法。它会做什么 尽管db已存在于文档中,但每次都会继续复制db 目录和您的文档目录db将替换为示例结构。您应该始终检查db是否已存在于文档目录中。
2)您的数据库被复制到文档目录但结构中 未获得#39;吨。 db文件目录中没有学生信息表。
3)请避免在表名中使用空格或任何特殊字符。
所以我刚刚在实用程序类中更正了方法getPath。
请用这个替换你的方法
class func getPath(_ fileName: String) -> String {
let bundlePath = Bundle.main.path(forResource: "Data", ofType: ".db")
let destPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let fileManager = FileManager.default
let fullDestPath = URL(fileURLWithPath: destPath).appendingPathComponent("Data.db")
if fileManager.fileExists(atPath: fullDestPath.path){
print("Database file is exist")
print(fileManager.fileExists(atPath: bundlePath!))
}else{
do{
try fileManager.copyItem(atPath: bundlePath!, toPath: fullDestPath.path)
}catch{
print("\n",error)
}
}
print(fullDestPath.path)
return fullDestPath.path
}
更改了这段代码后,我试图在我的设备中运行并插入几条记录。
如果您还有其他问题,请与我们联系。
如果您觉得这个答案有帮助,请接受它。