1

私はコアデータデータベースを持っています。私は接触によってグループ化され、日付順にメッセージを表示したいNSFetchedResultsController iMessageのようなテーブル

enter image description here

:構造は、画像の上にある(DBContactプロパティmessagesと多くのDBMessagesを持って、各DBMessageは、プロパティcontactと一つの接点を持っています)。したがって、行数はメッセージとの連絡先の数でなければなりません。そして、各行で、私はアバター、連絡先の名前と姓、連絡先の最後のメッセージの日付と日付を表示しなければなりません。

私が見つけた唯一の解決策は次のとおりです。

let entityName = kDBOrder 
     let entityDescription = NSEntityDescription.entityForName(entityName, inManagedObjectContext: managedObjectContext) 
     let fetchRequest = NSFetchRequest() 
     fetchRequest.entity = entityDescription 
     fetchRequest.fetchBatchSize = 20 
     // sort 
     fetchRequest.sortDescriptors = [NSSortDescriptor(key: "contact.id", ascending: false), NSSortDescriptor(key: "date", ascending: false)] 
     let sectionNameKeyPath: String? = "contact.id" 
     self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: sectionNameKeyPath, cacheName: nil) 
     fetchedResultsController!.delegate = self 
     if tableViewMain != nil { 
      do { 
      try fetchedResultsController!.performFetch() 
      } catch { 
      print("An error occurred in fetchresultcontroller") 
      } 
      tableViewMain.reloadData() 
     } 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     var count = 0 
     if let sections = fetchedResultsController?.sections { 
      let currentSection = sections[section] 
      count = currentSection.numberOfObjects 
      // in each section we must have only 1 row 
      if count > 0 { 
       count = 1 
      } 
     } 
     return count 
    } 

しかし、この場合に接点はidでソートされますが、私は最後のメッセージの日付によってそれらをソートする必要があります。しかし、最初にsortDescriptorsをfetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false), NSSortDescriptor(key: "contact.id", ascending: false)]に変更すると、連絡先が正しく表示されません。 これを実装する方法を知っている人はいますか?

答えて

1

私はおそらく、モデルを変更して、生活を楽にし、少し早く処理を行うようにします。基本的に、2つのエンティティの間に1対1の別の関係を追加すると、新しいメッセージが追加されるたびにその関係が更新されるため、常に最新のメッセージへの直接ポインタがあります。

フェッチで連絡先を使用するだけなので、FRCとテーブルの読み込み速度は簡単です。関係が更新され、連絡先が変更され、FRCに表示されるため、新しいメッセージも正しく処理されます。

+0

ありがとうございます。 –

+0

ありがとうございますが、日付と種類の順序でフィルタを設定する必要があります。この実装は機能しません。他のアドバイスはできますか? –

+0

注文の種類はどういう意味ですか?日付を使用する述部を適用することはできます。 – Wain

関連する問題