0

こんにちは、データがコアデータに保存されている特定の日にテーブルをロードしようとしています。セクションごとにセーブするたびにデータをロードしたい。コアデータに保存されるさまざまな測定値があります。私は非常に遠くになっていません。手伝ってくれますか?Swift Coreのデータを1日ごとにフェッチし、時間のセクションを含むテーブルビューにソートする

var totalEntries: Int = 0 
var isPerformingSegue = false 
var totalDates: Int = 0 
var results: NSArray! = NSArray() 
var appDel: AppDelegate! 
var context: NSManagedObjectContext! 
var request : NSFetchRequest! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    appDel = (UIApplication.sharedApplication().delegate as! AppDelegate) 
    context = appDel.managedObjectContext 
    loadTable() 
} 

func loadTable() { 
    let today = NSDate() 

    // get the current calendar 
    let calendar = NSCalendar.currentCalendar() 
    // get the start of the day of the selected date 
    let startDate = calendar.startOfDayForDate(today) 
    // get the start of the day after the selected date 
    let endDate = calendar.dateByAddingUnit(.Day, value: 1, toDate: startDate, options: NSCalendarOptions())! 

request.returnsObjectsAsFaults = false 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" 
dateFormatter.timeZone = NSTimeZone(name: "GMT") // this line resolved me the issue of getting one day less than the selected date 

totalEntries = context.countForFetchRequest(request, error: nil) as Int! 

request.predicate = NSPredicate(format: "(date >= %@) AND (date <= %@)", startDate, endDate) 
request.sortDescriptors = [NSSortDescriptor(key: "report_id", ascending: false)] 

do { 
    var results : NSArray = try context.executeFetchRequest(request) 
    } catch { 
    // Report any error we got. 
    } 
} 

// MARK: - Table view data source 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return results.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
let cell: ResultTableViewCell = tableView.dequeueReusableCellWithIdentifier("resultCell") as! ResultTableViewCell 

    //get contents and put into cell 
    let OurData = results[indexPath.row] as! NSManagedObject 

    if indexPath.row == 0 { 

    let colourLevel: Int = ((OurData.valueForKey("colourLevel"))?.integerValue)! 
    cell.resultLabel.textColor = UIColor.whiteColor() 
    cell.resultLabel.text = "Colour of Bowel Movement" 
    cell.backgroundColor = GlobalColourConstants.colourColourArray[(colourLevel - 1)] 
    return cell 

} else if indexPath.row == 1 { 

    let bmLevel: Int = ((OurData.valueForKey("bMLevel"))?.integerValue)! 
    cell.resultLabel.text = GlobalPhrazesConstants.GlobalPhrazesStrings.bMPhrazeArray[bmLevel] 
    cell.resultLabel.textColor = UIColor.whiteColor() 
    let imageName = GlobalUIImageConstants.bMImageArray[bmLevel] 
    let image = UIImage(named: imageName) 
    cell.resultIconImageView.image = image 
    cell.backgroundColor = GlobalColourConstants.bMColourArray[bmLevel] 

    return cell 

} else { 

    return cell 
} 
} 

私は以下のように方法を無効にしており、近づいています。今私は日のデータで並べ替えることができ、時間単位で並べ替えることができます。しかし、私は表示するために複数の行を取得することはできません(複数の行が必要です)。私は保存するときに、あなたがこれを行う方法は、あなたのエンティティにタイムスタンプ属性を追加し、この属性を移入することができ、それらが作成/保存した場所、日付に基づいてエントリをソートしたい理解して何のため

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // core data 
    fetchedResultController = getFetchedResultController() 
    fetchedResultController.delegate = self 
    do { 
    try fetchedResultController.performFetch() 
    } catch _ { 
    } 
} 

    // MARK:- Retrieve Tasks 

func getFetchedResultController() -> NSFetchedResultsController { 
    fetchedResultController = NSFetchedResultsController(fetchRequest: taskFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: "savedTimeHourMinute", cacheName: nil) 
    return fetchedResultController 
} 

func taskFetchRequest() -> NSFetchRequest { 
    let fetchRequest = NSFetchRequest(entityName: "UserData") 
    let sortDescriptor = NSSortDescriptor(key: "savedTimeMonthDay", ascending: true) 
    fetchRequest.sortDescriptors = [sortDescriptor] 

    return fetchRequest 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    if let sections = fetchedResultController.sections { 
    return sections.count 
} 

return 0 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if let sections = fetchedResultController.sections { 
    let currentSection = sections[section] 
    return currentSection.numberOfObjects 
    } 
    return 0 
} 

答えて

0

オブジェクト。次に、sortDescriptorを使用して、タイムスタンプ属性に基づいてフェッチしたレコードをソートします。

let sortDescriptor = NSSortDescriptor(key: "savedTimestamp", ascending: true) 
let fetchRequest = NSFetchRequest(entityName: "myRecord") 
fetchRequest.sortDescriptors = [sortDescriptor] 
//- fetch records as you would 
var savedRecords: [myRecord]? 
do { 
    savedRecords = managedObjectContext.executeFetchRequest(fetchRequest) as? [myRecord] 
} catch { 
    print("the calamity!") 
} 

これが役立つことを願っています。

+0

質問を少し新しい方向に更新しました。私はNsfetchcontrollerが私が使用すべきものだと読んでいます。 – SashaZ

関連する問題