2017-01-14 7 views
0

CoreDataからフェッチされた結果のデータにアクセスしようとして問題が発生しました。 データはUITableViewに表示されていますが、それはうまく表示されます。属性に基づいてデータをフィルタリングするオプションを実装しようとしています。これはまた、NSCompoundPredicateを介して正常に動作します。CoreDataからフェッチされたエンティティ属性値にアクセスする

フェッチ要求は正常に処理されますが、フェッチされたエンティティの属性の1つから値を抽出して合計コストを提示する問題があります。

フィルタリングされた結果を取得するためのコード:

func attemptFilteredFetch(filter: Array<NSPredicate>) 
{ 
    let filterCriteria: NSCompoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: filter) 
    let fetchRequest: NSFetchRequest<StoredExpense> = StoredExpense.fetchRequest() 
    let dateSort = NSSortDescriptor(key: "dateOfExpense", ascending: false) 
    fetchRequest.sortDescriptors = [dateSort] 
    fetchRequest.predicate = filterCriteria 

    let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) 
    controller.delegate = self 
    self.controller = controller 

    do 
    {    
     try controller.performFetch()    
    } 
    catch 
    { 
     let error = error as NSError 
     print("\(error)") 
    } 
    expenseList.reloadData() 
} 

は、これまでのところ、私はしかし、アプリがクラッシュ attemptFilteredFetch()関数が呼び出されると、私はオンラインで見つける hereと同様のものを見つけた方法を、試してみました。

これは間違っているかもしれませんが、フェッチ要求を配列に追加し、それを繰り返して合計値を取得することができます。

良い方法がありますか?あるいは、属性の値にオンザフライでアクセスする方法はありますか?

+1

どのようなエラーが表示されますか?また、モデルを変更しましたか?光の移行をオンにする必要があります。 – CryingHippo

+0

私はそれを理解しました。 NSManagedObject Subclassを手動で生成するとあいまいなエラーが発生するようです。私は手動で作成されたモデルを削除し、問題は解決されました。 – boywithaxe

答えて

0

この問題は、古いバージョンのXcodeから継承されたモデルに起因しています。 CoreDataを使用できるようにするためのベータ版のAFAIK NSManagedObjectサブクラスは手動で作成しなければなりませんでした。これはXcodeの最終版では今や冗長であるように思われるので、手動で作成されたモデルはランダムなエラーを投げていました。それを削除してコードを整理すると、私が持っていた問題が解決しました。

関連する問題