从 fetchedResultsController 获取不需要的节数
Getting undesired number of sections from fetchedResultsController
我在让 tableView
正确更新时遇到问题,尽管我已经取得了一些进展。我认为问题的根源在于我的 fetchedResultsController
返回了不需要的节数。
我的 objective 是让 SongSequences
显示在按 songSequenceTitle
排序的一个部分中。我对 fetchedResultsController
所做的工作最终将每个 SongSequence
视为一个新部分。
我有 Songs
作为 NSOrderedSet
添加到 SongSequence
。这是我的 NSManagedObjects
的样子:
extension SongSequence {
@NSManaged var songSequenceTitle: String!
@NSManaged var songs: NSOrderedSet!
}
extension Song {
@NSManaged var favorite: NSNumber!
@NSManaged var songDescription: String!
@NSManaged var songFilename: String!
@NSManaged var songStar: String?
@NSManaged var songSequences: NSOrderedSet!
}
当我将它们从 managedObjectContext
中拉出来时,我的 fetchedResultsController
将每个 SongSequence
视为一个单独的部分,这对我的 NSFetchedResultsController
委托方法造成了严重破坏和 tableView
在 managedObjectContext
更改时更新方法。
lazy var fetchedResultsController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest(entityName: "SongSequence")
let sortDescriptor = NSSortDescriptor(key: "songSequenceTitle", ascending: true);
fetchRequest.sortDescriptors = [sortDescriptor]
let frc = NSFetchedResultsController (fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: "songSequenceTitle", cacheName: nil)
frc.delegate = self
return frc
}()
我很困惑为什么 fetchedResultsController
将每个 SongSequence
视为一个单独的部分。
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
print("PlaylistVC numberOfSectionsInTableView = \(fetchedResultsController.sections!.count)")
// This is equal to the number of SongSequences in my MOC
return fetchedResultsController.sections!.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// This is always 1
let numberOfRowsInSection = fetchedResultsController.sections?[section].numberOfObjects
return numberOfRowsInSection!
}
如何在一个部分中显示所有 SongSequences
?
在您的抓取结果控制器中,您指定了一个 non-nil sectionNameKeyPath
。这是按标题对歌曲序列进行分组,并且由于每个歌曲序列标题都是不同的,因此每个歌曲都出现在自己的部分中。
A key path on result objects that returns the section name. Pass nil to indicate that the controller should generate a single section.
通过将 sectionNameKeyPath
设置为 nil 来初始化您的 frc,以避免按部分对歌曲序列进行分组。
let frc = NSFetchedResultsController (fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
我在让 tableView
正确更新时遇到问题,尽管我已经取得了一些进展。我认为问题的根源在于我的 fetchedResultsController
返回了不需要的节数。
我的 objective 是让 SongSequences
显示在按 songSequenceTitle
排序的一个部分中。我对 fetchedResultsController
所做的工作最终将每个 SongSequence
视为一个新部分。
我有 Songs
作为 NSOrderedSet
添加到 SongSequence
。这是我的 NSManagedObjects
的样子:
extension SongSequence {
@NSManaged var songSequenceTitle: String!
@NSManaged var songs: NSOrderedSet!
}
extension Song {
@NSManaged var favorite: NSNumber!
@NSManaged var songDescription: String!
@NSManaged var songFilename: String!
@NSManaged var songStar: String?
@NSManaged var songSequences: NSOrderedSet!
}
当我将它们从 managedObjectContext
中拉出来时,我的 fetchedResultsController
将每个 SongSequence
视为一个单独的部分,这对我的 NSFetchedResultsController
委托方法造成了严重破坏和 tableView
在 managedObjectContext
更改时更新方法。
lazy var fetchedResultsController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest(entityName: "SongSequence")
let sortDescriptor = NSSortDescriptor(key: "songSequenceTitle", ascending: true);
fetchRequest.sortDescriptors = [sortDescriptor]
let frc = NSFetchedResultsController (fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: "songSequenceTitle", cacheName: nil)
frc.delegate = self
return frc
}()
我很困惑为什么 fetchedResultsController
将每个 SongSequence
视为一个单独的部分。
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
print("PlaylistVC numberOfSectionsInTableView = \(fetchedResultsController.sections!.count)")
// This is equal to the number of SongSequences in my MOC
return fetchedResultsController.sections!.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// This is always 1
let numberOfRowsInSection = fetchedResultsController.sections?[section].numberOfObjects
return numberOfRowsInSection!
}
如何在一个部分中显示所有 SongSequences
?
在您的抓取结果控制器中,您指定了一个 non-nil sectionNameKeyPath
。这是按标题对歌曲序列进行分组,并且由于每个歌曲序列标题都是不同的,因此每个歌曲都出现在自己的部分中。
A key path on result objects that returns the section name. Pass nil to indicate that the controller should generate a single section.
通过将 sectionNameKeyPath
设置为 nil 来初始化您的 frc,以避免按部分对歌曲序列进行分组。
let frc = NSFetchedResultsController (fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)