Swift:使用 sectionNameKeyPath 的单元格的 indexPath
Posted
技术标签:
【中文标题】Swift:使用 sectionNameKeyPath 的单元格的 indexPath【英文标题】:Swift: indexPath of cells using sectionNameKeyPath 【发布时间】:2018-05-05 14:54:39 【问题描述】:目前,我刚刚开始在 Swift 的核心数据中使用 NSFetchedResultsController 中的 sectionNameKeyPath /
最初,我不知道如何将不同的单元格分成各自的日期。但是现在我已经将单元格分成了各自的日期,它们的 indexPath 都搞砸了,因为当我执行 segue 以导致第二个 viewController 时,值被搞砸了。
例如
第二个 $42.5 -> $9.0, 10 美元 -> 9.0 美元, $72.0 -> $42.5, $0.0 -> $99.0 和 $9.0 -> $10.0如果有人能教我如何在从 coreData 获取后正确调整 indexPath 以适应每个部分,那将非常有帮助。
func initialFetch()
let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "dates", ascending: false)] //sorting according to date
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "dates", cacheName: nil)
controller.delegate = self
self.controller = controller
do
try controller.performFetch()
catch
fatalError("Failed to fetch entities: \(error)")
这是我获取数据的代码
附:我认为这可能与我的“didSelectRowAt”有关
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if let objs = controller.fetchedObjects, objs.count > 0
let item = objs[indexPath.row]
performSegue(withIdentifier: "TrackerVC", sender: item)
【问题讨论】:
好的,我的问题已经解决了,答案如下 【参考方案1】:您的排序描述符需要包括作为部分的字段和部分中的行,因此将价格属性的排序描述符添加到现有的。
【讨论】:
我尝试添加这个,但它仍然不起作用'' fetchRequest.sortDescriptors = [NSSortDescriptor(key: "dailySpending", ascending: false)] '' @Kendrew 添加,而不是替换。fetchRequest.sortDescriptors = [NSSortDescriptor(key: "dates", ascending: false), NSSortDescriptor(key: "dailySpending", ascending: false)]
嗨,感谢您的回复。我以前也尝试过,它有助于按支出对我的行进行排序,但不能解决上述问题【参考方案2】:
好的,经过数周的反复试验和研究,我终于找到了最简单的解决方案。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let item = controller.object(at: indexPath)
performSegue(withIdentifier: "TrackerVC", sender: item)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "TrackerVC"
if let destination = segue.destination as? TrackerVC
if let item = sender as? Item
destination.itemToEdit = item
所以这是我发现的根据每个部分中的行执行 segue 的最简单的解决方案
【讨论】:
以上是关于Swift:使用 sectionNameKeyPath 的单元格的 indexPath的主要内容,如果未能解决你的问题,请参考以下文章
Swift 类使用 Objective-C 类使用 Swift 类
我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?
Swift : 使用多个 swift 文件或仅使用一个 viewController?保持清洁
如何使用 Swift Package Manager `swift build` 命令构建 Swift Package 的优化版本