0

Merhaba Verilerin temel verilere kaydedildiği belirli bir gün için bir tablo yüklemeye çalışıyorum. Her bir kayıt bir bölüm olmak üzere veriler yüklenmesini istiyorum. Ana verilere kaydedilen birçok farklı ölçüm var. Çok uzağa gitmiyorum. Yardım edebilir misin?Swift Çekirdek verileri, güne göre sonuçların alınmasına ve zaman bölümleri ile bir tablo görünümüne göre sıralamaya başlar.

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 
} 
} 

Aşağıdaki gibi yöntemi geçersiz kıldım ve daha yakınına sahibim. şimdi bir günlük verilere göre sıralama yapabilir ve zamana göre bölümler halinde sıralayabilirim. Ancak, göstereceğim bir satırdan fazlasını alamıyorum (bir satırdan daha fazlası olmalı). kaydederken

ben Kaydedilebilmeleri/yaratılmış nereye o tarihe göre girişlerini sıralamak istediğiniz ne anlamak için
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 
} 

cevap

0

, bunu yapmanın bir yolu varlığa bir zaman damgası öznitelik eklemek ve bu niteliği doldurmak için olabilir nesne. Sonra, kendi zaman damgası öznitelikleri temelinde getirdiğiniz kayıtları sıralamak için bir sortDescriptor kullanın. Bu konuda yardımcı olacak bir şey var:

+0

Soruyu yeni bir yönüyle biraz güncelledik. Nsfetchcontroller'ın kullanmam gereken şey olduğunu okudum. – SashaZ

İlgili konular