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çinlet 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
}
Soruyu yeni bir yönüyle biraz güncelledik. Nsfetchcontroller'ın kullanmam gereken şey olduğunu okudum. – SashaZ