我一直收到以下错误:
致命错误:'尝试!'表达式意外地引发了一个错误:磁盘I / O. 错误(代码:10):文件 /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-800.0.63/src/swift/stdlib/public/core/ErrorType.swift, 第178行
当我实现以下代码时:
try db!.transaction() {
hold = true
for obj in object {
if table.rawValue == DBTableNames.Products.rawValue {
let product : ProductObject = obj as! ProductObject
insert = self.productsTable.insert(
self.productcode <- product.productcode,
self.admincost <- product.admincost,
self.allocatedstock <- product.allocatedstock,
self.availablestock <- product.availablestock,
self.backorderstock <- product.backorderstock,
self.barcode <- product.barcode,
self.binno <- product.binno,
self.casesperlayer <- product.casesperlayer,
self.clearanceprice <- product.clearanceprice,
self.exportprice <- product.exportprice,
self.fulldescription <- product.fulldescription,
self.gqcoded <- product.gqcoded,
self.group <- product.group,
self.innerbarcode <- product.innerbarcode,
self.innerqty <- product.innerqty,
self.lastPoDate <- product.lastPoDate as Date,
self.layersperpallet <- product.layersperpallet,
self.longdescription1 <- product.longdescription1,
self.mtdsales <- product.mtdsales,
self.onorderstock <- product.onorderstock,
self.outerbarcode <- product.outerbarcode,
self.packqty <- product.packqty,
self.palletqty <- product.palletqty,
self.physicalstock <- product.physicalstock,
self.rollingsales <- product.rollingsales,
self.rsp <- product.rsp,
self.shortdescription <- product.shortdescription,
self.threemonth <- product.threemonth,
self.warehouse <- product.warehouse,
self.weight <- product.weight,
self.wholesaleprice <- product.wholesaleprice,
self.ytdsales <- product.wholesaleprice)
}
}
try self.db!.run(insert)
}
我理解它的I / O错误,但我不明白还有什么可以访问阻止插入的数据库
答案 0 :(得分:0)
如果您在模拟器上收到错误,请阅读第2部分。如果在实际设备上发生错误,请尝试第1部分,还可以尝试在模拟器中运行您的应用并尝试我的答案的第2部分。
如果您使用的是实际设备并收到SQLite I / O错误: 错误的原因可能是数据库文件的位置。位置是:
/var/mobile/Containers/Data/Application/someid/Documents/somedb.sqlite3
我通过将db文件移动到:
来消除错误static var destinationSqliteURL: URL!
let myPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
destinationSqliteURL = myPath.appendingPathComponent("somedb.sqlite3")
所以而不是:
static var destinationSqliteURL: URL!
let myPath = fileManager.urls(for: .libraryDirectory, in: .allDomainsMask)[0]
destinationSqliteURL = myPath.appendingPathComponent("somedb.sqlite3")
我用过:
{{1}}
你应该验证文件是否正常(使用xcode模拟器),打印出myPath并cd进入包含数据库的文件夹,然后在终端打开数据库文件:
sqlite3 somedb.sqlite3
可能没有文件或文件已损坏且必须更换。
答案 1 :(得分:0)
我有完全相同的问题。我的解决方案是从(单例)管理器类中删除数据库引用,并在下载新的数据库版本后重新初始化它。我的经理保留了旧数据库的参考。