2016-11-08 20 views
0

私は拡張機能付きのコアデータと以下のエラーを処理しています。Swift3 CoreData(拡張子付き)

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: is not a valid NSFetchRequest.'

ホストアプリケーションではうまくいきますが、同じコードの拡張機能はクラッシュします。

デバッガは

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 
} 

managedObjectContext.fetch(要求)を実行したときにこれはのtry-catchで書かれていてもクラッシュし停止しました。 助けてください。

+0

最初のチェックエンティティ名とrequest.entityが得られているかどうか。 –

+0

@ChandanJeeチェックしました。エンティティ名に問題はありません。これはホストアプリケーションでうまくいきます。このエラーは拡張機能でのみ発生します。 – Minjee

答えて

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 } 

これは機能しました。

0

あなたNSFetchRequestのジェネリック型はDataStringすることがあります。

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

managedObjectContext.perform { 
    do { 
     let results = request.execute() 
    } catch let error { 
     ... 
    } 
} 
関連する問題