带有扩展的 Swift 核心数据
Posted
技术标签:
【中文标题】带有扩展的 Swift 核心数据【英文标题】:Swift3 CoreData with Extension 【发布时间】:2016-11-08 08:33:45 【问题描述】:我正在处理带有扩展的核心数据,但出现以下错误。
由于未捕获的异常“NSInvalidArgumentException”而终止应用,原因:“executeFetchRequest:error: is not a valid NSFetchRequest.”
它在宿主应用上仍然运行良好,但是在具有相同代码的扩展上崩溃。
执行 managedObjectContext.fetch(request) 时调试器停止
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 编写也会崩溃。 请帮忙。
【问题讨论】:
先检查实体名称和request.entity是否获取。 @ChandanJee 检查过了。实体名称没有问题,这在主机应用程序上运行良好。此错误仅发生在扩展程序上。 【参考方案1】:NSFetchRequest
的泛型类型必须是 DataString
:
let request: NSFetchRequest<DataString> = DataString.fetchRequest()
managedObjectContext.perform
do
let results = request.execute()
catch let error
...
【讨论】:
【参考方案2】:回答我自己。
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
这行得通。
【讨论】:
以上是关于带有扩展的 Swift 核心数据的主要内容,如果未能解决你的问题,请参考以下文章