带扩展的Swift3 CoreData

时间:2016-11-08 08:33:46

标签: core-data swift3 xcode8 ios10 ios-app-extension

我正在使用扩展程序处理核心数据,并在下面发生错误。

  

由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' executeFetchRequest:错误:不是有效的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编写,这也会崩溃。 请帮忙。

2 个答案:

答案 0 :(得分:0)

NSFetchRequest的通用类型必须为DataString

let request: NSFetchRequest<DataString> = DataString.fetchRequest()

managedObjectContext.perform {
    do {
        let results = request.execute()
    } catch let error {
        ...
    }
}

答案 1 :(得分:0)

回答自己。

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 }

这很有用。