2
fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath:"time", cacheName: nil) 

私はこのコードを使用しています。ここで、timeはDate()オブジェクトを格納する列名です。日付でセクションとしてコアデータからデータをフェッチする方法は?

私は例えば日 上のセクションのベースを取得したい。

29-11-2016総行= 3

28-11-2016総行= 1

が、現在同じ時刻に の時間差ごとに別のセクションが表示されます。

したがって、どのようにフェッチリクエストコントローラを使用してこれを達成できますか。 ????

ありがとうございます。

+0

時間、分、秒を使用しない場合は、「コアデータ」に「日付」(例:29-11-2016の場合)として保存することをお勧めします。その後、データは日付に基づいてグループ化されます。 –

+0

あなただけのストアを意味日付は時間がないのですか? – Chandan

+0

はい、正確に正しいです。 –

答えて

0

この問題は、既にスタックオーバーフローの解決策です。それはそれを確認してください動作します。

import UIKit 
import CoreData 

class ExampleViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext! 
    var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController() 

    var orders = [Order]() 
    var startDate : NSDate = NSDate() 
    var endDate : NSDate = NSDate() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     fetchedResultController.delegate = self 
     tableView.dataSource = self 
     tableView.delegate = self 

     fetchData() 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return fetchedResultController.fetchedObjects!.count 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     let order = fetchedResultController.fetchedObjects![section] as! Order 
     return ((order.products?.count ?? 0) + (order.services?.count ?? 0)) 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let textCellIdentifier = "ExampleTableViewCell" 
     let row = indexPath.row 

     let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as! ExampleTableViewCell 

     let order = fetchedResultController.fetchedObjects![indexPath.section] as! Order // Data fetched using NSFetchedResultsController 
     let products = (order.products?.allObjects ?? [Product]()) as! [Product] // Swift Array 
     let services = (order.services?.allObjects ?? [Service]()) as! [Service] // Swift Array 

     if (row < products.count) { // this is a Product row 
      cell.orderLabel.text = products[row].name! 
     } else { // this is a Service row 
      cell.orderLabel.text = services[row-products.count].name! 
     } 
     return cell 
    } 

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     let order = fetchedResultController.fetchedObjects![section] as! Order 
     return "\(order.date)" 
    } 


    func orderFetchRequest() -> NSFetchRequest { 
     let fetchRequest = NSFetchRequest(entityName: "Order") 
     let sortDescriptor = NSSortDescriptor(key: "date", ascending: true) 
     let predicate = NSPredicate(format: "date >= %@ AND date <= %@", startDate, endDate) // startDate and endData are defined elsewhere 

     fetchRequest.sortDescriptors = [sortDescriptor] 
     fetchRequest.predicate = predicate 

     return fetchRequest 
    } 

    func fetchData() { 
     let fetchRequest = orderFetchRequest() 
     fetchedResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath:nil, cacheName: nil) 

     do { 
      try fetchedResultController.performFetch() 
     } 
     catch let error as NSError { 
      print("Could not fetch \(error), \(error.userInfo)") 
     } 
    } 
} 

ただコピーして貼り付けてください。それがあなたのために働くことを願っています。そうでなければ、私はあなたを助けるでしょう。

+0

ご回答いただきありがとうございますが、上記のコードは2つの日付の間に結果を取得するためのものです。しかし私の質問は、どのように結果のグループの日付ごとに日付賢明なセクションをフェッチするかです。日付はセクションになり、結果は各日付の行数になります。 – Chandan

関連する問題