虽然我已经取得了一些进展,但我正在让tableView
正确更新时遇到问题。如果我的麻烦在于fetchedResultsController
返回了不需要的部分,我认为来源。
我的目标是让SongSequences
显示在一个按songSequenceTitle
排序的部分中。我对fetchedResultsController
所做的事情最终会将每个SongSequence
视为一个新的部分。
我将Songs
作为SongSequence
添加到NSOrderedSet
。这是我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
委托方法造成了严重破坏,{ {1}}在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!
}
?
答案 0 :(得分:1)
在提取的结果控制器中,您指定了non-nil sectionNameKeyPath
。这是按标题对歌曲序列进行分组,由于每个歌曲序列标题都是不同的,因此每个歌曲序列都出现在它自己的部分中。
返回节名称的结果对象的键路径。传递nil以指示控制器应生成单个部分。
通过将sectionNameKeyPath
设置为nil来初始化你的frc,以避免按部分对歌曲序列进行分组。
let frc = NSFetchedResultsController (fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)