- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经简化了我的问题以使问题变得更容易,所以希望我发布的代码足够了。
我的目标是使用一个可以支持 CoreData 中的多个模型的类,这样我就可以避免为每个类重新创建相同的内容。
class FRC<T> where T: NSManagedObject {
let context: NSManagedObjectContext
fileprivate lazy var fetchedResultscontroller: NSFetchedResultsController<T> = { [weak self] in
guard let this = self else {
fatalError("lazy property has been called after object has been descructed")
}
guard let request = T.fetchRequest() as? NSFetchRequest<T> else {
fatalError("Can't set up NSFetchRequest")
}
request.sortDescriptors = [NSSortDescriptor(key: "key", ascending: true)]
return NSFetchedResultsController<T>(fetchRequest: request,
managedObjectContext: this.context,
sectionNameKeyPath: nil,
cacheName: nil)
}()
init(context: NSManagedObjectContext) {
self.context = context
}
}
enum ModelType {
case modelA
case modelB
}
class GenericDataModel: NSObject {
let container: NSPersistentContainer
// STUPID!!!
var frcA: FRC<ModelA>?
var frcB: FRC<ModelB>?
init(modelType: ModelType) {
container = NSPersistentContainer(name: "MyContainer")
container.loadPersistentStores { _, error in /* Handle */ }
// Below here is ugly!
switch modelType {
case .modelA:
frcA = FRC<ModelA>(context: container.viewContext)
case .modelB:
frcB = FRC<ModelB>(context: container.viewContext)
}
}
}
extension GenericDataModel: NSFetchedResultsControllerDelegate {
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,
didChange anObject: Any,
at indexPath: IndexPath?,
for type: NSFetchedResultsChangeType,
newIndexPath: IndexPath?) {
// Handle
}
}
看来我能做的最好的事情就是在 GenericDataModel 类中为不同的模型类创建多个变量,这对于大量模型类来说无法很好地扩展。
但是,尝试为 FRC 类创建单个局部变量始终失败,我无法理解为什么。
我是泛型新手,所以很可能我只是做了一些愚蠢的事情。
最佳答案
这不是一个坏主意。我已经做到了: https://github.com/jon513/FetchedResultsControllerNeverCrash/blob/master/coreDataNeverCrash/FetchedResultsControllerManager.swift
这实现了一种方法,使核心数据在同时进行删除和更新时永远不会崩溃(请参阅 App crashes after updating CoreData model that is being displayed in a UITableView ),并使 API 更容易一些。
要使用它,请创建一个带有 fetchRequest、上下文和委托(delegate)的 FetchedResultsControllerManager。
委托(delegate)实现很简单:
extension ViewController : FetchedResultsControllerManagerDelegate {
func managerDidChangeContent(_ controller: NSObject, change: FetchedResultsControllerManagerChange) {
change.applyChanges(collectionView: collectionView)
}
}
由于泛型的原因,我无法让委托(delegate)返回正确的类,但我从来不需要测试除 equal 以外的任何东西,所以它从来没有打扰我。如果您可以让它与泛型一起使用,我很乐意收到拉取请求。
关于ios - 我想要一个用于核心数据的通用 fetchedResultsController 来支持多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53420904/
我正在尝试过滤 FetchedResultsController 中的项目以过滤掉特定的一组项目。这些发动机具有特定的字母名称,后跟数字。名称中可能的字母范围是从“A”到“O”。我希望能够根据另一个条
因此,我有以下代码用于获取所有名为“设置”的核心数据实体 - (NSFetchedResultsController *)fetchedResultsController { if (fetc
我遇到一种情况,需要使用多个排序描述符对数据进行排序。我想首先使用两个组件对数据进行排序,这两个组件是按降序排列的数字。然后,我应该在 TableView 上显示按名称组件排序的数据,并使用 sect
我有一个带有两个 UITableViews 的 UIViewController。这两个表是从不同的实体填充的,因此我使用了两个获取的结果 Controller 。在使用 UITableViewDel
我遇到了一个问题:在我的项目中,我使用 Core Data 来管理数据。我在所有项目中使用了一个 fetchResultsController。 在 AppDelegate.m 中,我执行了一个获取请
我使用了我在网络上流行的核心数据教程之一中找到的代码: lazy var fetchedResultsController: NSFetchedResultsController = {
我有一个多语言应用。用户根据他/她选择的当前语言插入数据,例如:如果用户选择英语,那么他/她此时插入的数据将与语言英语相关联,如果用户决定更改语言,例如,转到葡萄牙语,然后插入新记录,当前记录将与葡萄
我正在编写一个使用 coredata 的小应用程序,我有像主题这样的数据,其中包含数学、科学和其他书籍。 其他书籍可以添加或删除,但数学和科学不能删除,添加新学生时会默认添加。当我获取结果时,我应该获
在编程方面,我是一个周末勇士,所以我可能做错了什么...... 我有一个 Split View Controller 、核心数据、nsfetchedResultsController,一切都很好。我现
我在核心数据中有一个“账单”列表。对于每个账单,我希望 UITableViewController 中有一个单独的部分。我希望这些账单按金额排序。 为此,我使用 fetchedResultsContr
尝试创建简单的应用程序来显示从核心数据到 TableView 的数据。代码构建成功 - 每次加载时都会添加新条目,目前超过 20 个 - 但是在尝试构建表时它会崩溃。 这里我有 ViewControl
我已经简化了我的问题以使问题变得更容易,所以希望我发布的代码足够了。 我的目标是使用一个可以支持 CoreData 中的多个模型的类,这样我就可以避免为每个类重新创建相同的内容。 class FRC
我想将一个对象从 fetchedResultsController 发送到自定义单元格。 - (UITableViewCell *)tableView:(UITableView *)tableView
我在让 tableView 正确更新时遇到了问题,尽管我已经取得了一些进展。如果我的问题在于我的 fetchedResultsController 返回了不需要的部分,我认为问题的根源。 我的目标是让
我有两个实体 A 和 B,它们的关系是多对多的。实体类如下: 一个NSSet *toB 乙NSSet *toA 现在我有一个 A 对象,我可以通过使用“toB”集获取所有相关的 B 对象。由于需要对B
我有由获取结果 Controller 管理的 TableView 。我想要的是,当用户点击分段控件时更改排序顺序。这就是我创建获取结果 Controller 的方式: - (NSFetchedResu
我在 IB 中有一个原型(prototype) TableView ,它有两种不同类型的单元格:完整单元格和基本单元格(用于显示文章,我根据文章类型使用每一种单元格)。 我想将 FetchedResu
+-----------+ +-----------+ | -Parada- | | -Autobus- | +-----------+
假设我有以下类模型。我有 UITableView,它按以下方式显示 Days 表中的数据: Monday 02.03 5 lessons Wednesday 04.03 3 lessons 任务很简单
我正在尝试获取按其属性之一(单词)过滤的实体列表,为此我使用了 fetchedResultsController,一切看起来都正常。该列表已加载并显示在我的 tableView 上,我什至可以对列表进
我是一名优秀的程序员,十分优秀!