我想问一下如何按日期对数据(部分)进行分组?
有我的代码:
import UIKit
import CoreData
class TableViewController: UITableViewController {
var myList = []
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
let appDel : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context : NSManagedObjectContext = appDel.managedObjectContext!
let freq = NSFetchRequest(entityName: "Item")
myList = context.executeFetchRequest(freq, error: nil)!
tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myList.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
var object : NSManagedObject = myList[indexPath.row] as! NSManagedObject
let name = object.valueForKeyPath("name") as! String
let qty = object.valueForKeyPath("qty") as! Int
let date = object.valueForKeyPath("date") as! String
cell.nameLabel.text = name
cell.qtyLabel.text = toString(qty)
cell.dateLabel.text = date
return cell
}
}
详细说明: 现在我的日期样本只是行(默认只有1个部分) 例如:
apple 1 Jul 10, 2015 (row 1)
orange 7 Jul 10, 2015 (row 2)
grape 5 Jul 11, 2015 (row 3)
我希望按日期分组,因此结果如下:
Jul 11, 2015 (section 1)
grape 5 (row 1)
Jul 10, 2015 (section 2)
apple 1 (row 2)
orange 7 (row 3)
注意:部分是动态的,取决于数据,排序日期下降
谁有解决方案?先于答案 0 :(得分:0)
你的列表myList应该是字典或数组数组的形式。
例如,如果它是字典,它应该是var myList: [String: [NSManagedObject]] = [:]
以日期为键
所有关于将数据分类为正确的格式。在viewDidAppear中,您可以执行类似
的操作for object in freq {
if let array = myList[object.valueForKeyPath("date")!] {
var a = array
a.append(object)
myList[object.date!] = a
} else {
myList[object.date!] = [object]
}
}
然后 在numberOfSectionsInTableView中,
return myList.count
numberOfRowsInSection中的
if let a = myList[sections[section]] {
return a.count
}
return 0
}
分段
var sections: [String] {
return Array(myList.keys).sorted(<)
}
在cellForRowAtIndexPath中,您可以获得相应的对象。
let array = myList[sections[indexPath.section]]!
let object = array[indexPath.row]
您还需要使用
实现viewForHeaderInSectionlet date = sections[section]
我确定有更好的方法可以做到这一点,但这足以动态填充表格视图。我只是想让你看到一个想法。希望它可以帮到你。