带有扩展的 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 核心数据的主要内容,如果未能解决你的问题,请参考以下文章

带有核心数据的 TableView 中的搜索栏(使用 Swift)

带有核心数据的 iOS Today 扩展

swift 3 - 核心数据关系 - 获取数据

Swift 核心数据更改 bool 存储

快速更新核心数据对象 3

Swift Core 数据按天获取结果并排序到带有时间段的表格视图中