2016-12-07 5 views
1

コアデータサブクラスの拡張を作成しました。ここにテーブルを事前に設定するメソッドを実装しました。まずテーブル内に何かがあるかどうかを確認します。キャッチされない例外により「NSInvalidArgumentException」にアプリを終了事前にコアデータにメソッドを設定する

を、理由:'executeFetchRequest:error: <null> is not a valid NSFetchRequest.'

import Foundation 
import CoreData 

extension SimulationParams { 

    public static func feedSimulationParams(context: NSManagedObjectContext) { 


     let fetchRequest : NSFetchRequest<NSFetchRequestResult> 

     if #available(iOS 10.0, *) { 
      fetchRequest = SimulationParams.fetchRequest() 
     } else { 
      fetchRequest = NSFetchRequest(entityName: "SimulationParams") 
     } 

     let idDescriptor: NSSortDescriptor = NSSortDescriptor(key: "id", ascending: false) 
     fetchRequest.sortDescriptors = [idDescriptor] 

     fetchRequest.fetchLimit = 1 


     var newId = 0; 

     do { 
      let results = try context.fetch(fetchRequest) 

      if(results.count == 0){ 

       self.setValue(getId(fetchRequest: fetchRequest, context: context), forKeyPath: "id") 
       self.setValue(1.5, forKeyPath: "bankFeePercentage") 
       self.setValue(1, forKeyPath: "consoMaxMonthly") 
       self.setValue(12, forKeyPath: "consoMinMonthly") 
       self.setValue(3.5, forKeyPath: "consoRatePercentage") 
       self.setValue(4, forKeyPath: "fileFeePercentage") 
       self.setValue(1, forKeyPath: "immoMaxMonthly") 
       self.setValue(25, forKeyPath: "immoMinMonthly") 
       self.setValue(2.05, forKeyPath: "immoRatePercentage") 
       self.setValue(3, forKeyPath: "prepaymentPenaltyPercentage") 
       self.setValue(1, forKeyPath: "notaryGridId") 

       do { 
        try context.save() 
       } catch let error as NSError { 
        print ("Error first demande insertion \(error)") 
       } 
      } 


     } catch { 
      let fetchError = error as NSError 
      print(fetchError) 
     } 



    } 
} 
+0

は関係ありませんが、なぜない 'self.bankFeePercentage = 1.5':

enter image description here

あなたはあなたのコードでこれを行う必要がありますか?あなたは '... forKeyPath'が実際に何のためにあるのか知っていますか? – vadian

+0

@vadian自己の属性にアクセスすることはできません。 forKeyPath、それはデータベースに関するものです – Ben

答えて

0

ソリューション:

警告、あなたはデータでモジュールを削除する必要があり、私はフェッチを行う際にエラーが出ますモデルインスペクタをグロブに設定al名前空間。

let fetchRequest : NSFetchRequest<NSFetchRequestResult> 

    if #available(iOS 10.0, *) { 
     fetchRequest = Params.fetchRequest() 
    } else { 
     fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Params") 
    } 

    //let predicate = NSPredicate(format: "key=%@", key) 
    //fetchRequest.predicate = predicate 

    do { 
     let results = try context.fetch(fetchRequest) 

     if(results.count != 0){ 

      let params = NSEntityDescription.insertNewObject(forEntityName: "Params", into: context) as! Params 

      params.setValue(value, forKey: "value") 

      do { 
       try context.save() 
      } catch let error as NSError { 
       print ("Error first demande insertion \(error)") 
      } 

     } else if (results.count == 0) { 

      let params = NSEntityDescription.insertNewObject(forEntityName: "Params", into: context) as! Params 

      params.key = key 
      params.value = value 

      context.insert(params) 
     } 


    } catch { 
     let fetchError = error as NSError 
     print(fetchError) 
    } 
関連する問題