我的coredata关系获取请求返回NSSet对象。如何在无序集中为NSset设置tableview数据源的数据。我可以将NSSet转换为NSArray,但它会以相同的顺序返回数据。
答案 0 :(得分:0)
Apple is clear"数组中对象的顺序是未定义的。"所以我希望它可以改变。
我建议您将allObjects
数组存储到实例变量中,并使用它来实现numberOfSectionsInTableView()
和其他数据源方法。
您还可以将NSFetchedResultsController
存储在实例变量中,并安全地使用它:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var rows = 0
if self.fetchedResultsController!.sections!.count > 0 {
let sectionInfo = getSectionInfo(section)
rows = sectionInfo!.numberOfObjects
}
return rows
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let sectionInfo = getSectionInfo(section)
return sectionInfo!.name
}
func getSectionInfo(section: Int) -> NSFetchedResultsSectionInfo? {
var sections: [AnyObject] = self.fetchedResultsController!.sections!
if section < sections.count {
let x = sections[section] as! NSFetchedResultsSectionInfo
return x
}
return nil
}
override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
return self.fetchedResultsController!.sectionForSectionIndexTitle(title, atIndex: index)
}
override func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
return self.fetchedResultsController!.sectionIndexTitles
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier")! as UITableViewCell
// Use your own NSManagedObject class here...mine is Category
let category = self.fetchedResultsController.objectAtIndexPath(indexPath) as! Category
return cell
}
我个人已经在我重用的基类中编写了所有上述方法,因此我可以在每个新的表视图中实现cellForRowAtIndexPath()
。我发布了a copy on github,以防它可能对其他人有用。