【问题标题】:One object in multiple sections when sorting with NSFetchedResultsController使用 NSFetchedResultsController 排序时,多个部分中的一个对象
【发布时间】:2018-08-20 06:06:21
【问题描述】:

我刚刚开始使用 Core Data 和 NSFetchedResultsController,我有点卡住了。我有一个 Book 实体,它的类别属性为 String 类型。数据被加载到集合视图中,并基于此类别按部分分组。这样一切正常,但问题是一本书应该能够出现在多个类别(和集合视图部分)中。我可以将类别的类型更改为字符串数组,但是我该如何进行排序呢?

let request = Book.fetchedRequest() as NSFetchRequest<Book>
let categorySort = NSSortDescriptor(key: #keyPath(Book.category)), ascending:true)
request.sortDescriptors = [categorySort]

do {
fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: #keyPath(Book.category)), cacheName: nil) 
try fetchedResultsController.performFetch()
} catch let error as NSError {
print(“Could not fetch. \(error), \(error.userInfo)”)
}

我应该放弃使用 NSFetchedResultsController 还是可以让它工作?

【问题讨论】:

    标签: ios swift core-data nsfetchedresultscontroller collectionview


    【解决方案1】:

    ...一本书应该能够出现在多个类别(和收藏视图部分)中。

    我应该放弃使用 NSFetchedResultsController 还是可以让它工作?

    使用获取的结果控制器无法实现您所描述的内容。 NSFetchedResultsController 获取所有获取的对象(可能是 由谓词过滤),根据排序描述符对它们进行排序,以及 根据sectionNameKeyPath 参数对它们进行分组。

    获取结果控制器无法提供相同的对象 多次(在相同或不同部分)。

    【讨论】:

      【解决方案2】:

      我认为将类别属性保留为字符串没有任何问题。只需更改处理书籍数组的方式即可。

      创建一个类别数组,如

      var booksInCategories: [[Book]] = []
      

      此变量将在每个数组中保存一个类别中的所有书籍。假设您的图书数组名为books

      var books: [Book] = []
      

      然后将每本书放在每个类别中,并将其添加到booksInCatogories 对象中。假设您将所有类别作为另一个字符串数组。

      var categories = ["Fiction", "Science", "Children", "Education"] // just an example
      

      如果有n个类别,那么booksInCatogories中会有n个书籍数组。

      for category in categories {
          var booksInCategory: [Book] = []
          for book in books {
              if book.category.range(of: category) != nil { // checks if category string contains particular category
                  booksInCategory.append(book)
              }
          }
          if booksInCategory.count > 0 { // to exclude empty array if a category doesn't have any books under it
              booksInCategories.append(booksInCategory)
          }
      }
      

      您现在可以使用 booksInCategories 数组,使用 booksInCategories 中的每个数组显示每个部分下属于每个类别的所有书籍。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-05
        • 2013-01-16
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        相关资源
        最近更新 更多