2016-08-10 8 views
3

私は自分のアプリにCoreDataを追加しています。単純なフェッチはOKですが、述語でデータをフェッチしようとすると、例外が発生します。AppDelegateswift CoreData述語

func fetchWithPredicate(table: String, pred: String)->NSArray 
{ 
    var appDel : AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate); 
    var context : NSManagedObjectContext = appDel.managedObjectContext 
    var request = NSFetchRequest(entityName: table) 
    request.predicate = NSPredicate(format: pred)//exception occurs on this string 
    request.returnsObjectsAsFaults = false 
    var results: NSArray = NSArray() 
    do{ 
     results = try context.executeFetchRequest(request) 
    } 

    catch{} 

    return results 
} 

私の述語は、次のようになります。"routeFormed == %@"+route.identifier!route.identifierStringです。 AppDelegateまたは私のエンティティに何かを追加する必要がありますか?また、私はsqlitebrowserと.sqliteファイルを開いて、私は目に見える名前や私がデータベース(i.e. "routeFormed" or "ZROUTEFORMED")?

答えて

3

で見たものを使用して述語を追加する必要がありますはないはそれが 些細な例が、いずれにも失敗にバインドされ、文字列として述語を作成してください。

let predicate = NSPredicate(format: "routeFormed == %@", route.identifier) 

または

let predicate = NSPredicate(format: "%K == %@", "routeFormed", route.identifier) 

として述語を作成し、フェッチ要求にそれを渡します。述部のキーは、コアデータモデル インスペクタで定義されているエンティティプロパティの名前の です。

+0

私はそれがうまくいかなかった理由を理解しました、ありがとう! – Jamil