带扩展名的Swift3 CoreData
问题描述:
我正在处理带扩展名的核心数据,并且在下面有错误。带扩展名的Swift3 CoreData
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: is not a valid NSFetchRequest.'
它在主机上的应用程序仍然运作良好,但是在具有相同代码的扩展崩溃。
调试器停止时执行managedObjectContext.fetch(请求)
func getDataString() -> String {
var result = ""
let entityDescription = NSEntityDescription.entity(forEntityName: "DataString", in: managedObjectContext)!
let request : NSFetchRequest<NSFetchRequestResult> = DataString.fetchRequest()
request.entity = entityDescription
do {
let results = try managedObjectContext.fetch(request)
printDebug(message: "\tDataString Count : \(results.count)")
if results.count > 0 {
let row = results[0] as! NSManagedObject
result = row.value(forKey: "data") as! String
}
} catch let error {
printDebug(message: "ERROR : getDataString fetch")
setErrorLog(errorText: "\(error)")
}
return result
}
这种崩溃即使与try-catch代码编写。 请帮忙。
答
回答自己。
func getDataString() -> String {
var result = ""
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "DataString")
do {
let results = try managedObjectContext.fetch(request)
printDebug(message: "\tDataString Count : \(results.count)")
if results.count > 0 {
let row = results[0] as! NSManagedObject
result = row.value(forKey: "data") as! String
}
} catch let error {
printDebug(message: "ERROR : getDataString fetch")
setErrorLog(errorText: "\(error)")
}
return result }
这工作。
答
泛型类型的NSFetchRequest
的必须是DataString
:
let request: NSFetchRequest<DataString> = DataString.fetchRequest()
managedObjectContext.perform {
do {
let results = request.execute()
} catch let error {
...
}
}
首先检查实体名称和request.entity是否正在获取。 –
@ChandanJee检查它。实体名称没有问题,这在主机应用程序中效果很好。该错误只发生在扩展名上。 – Minjee