从fetchedResultsController获取不需要数量的部分

时间:2016-01-11 02:09:38

标签: ios swift uitableview core-data nsfetchedresultscontroller

虽然我已经取得了一些进展,但我正在让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! }

1 个答案:

答案 0 :(得分:1)

在提取的结果控制器中,您指定了non-nil sectionNameKeyPath。这是按标题对歌曲序列进行分组,由于每个歌曲序列标题都是不同的,因此每个歌曲序列都出现在它自己的部分中。

  

返回节名称的结果对象的键路径。传递nil以指示控制器应生成单个部分。

通过将sectionNameKeyPath设置为nil来初始化你的frc,以避免按部分对歌曲序列进行分组。

let frc = NSFetchedResultsController (fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)