- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在导入发生后观察Entity
的变化。
目前我有下一个逻辑:
NSManagedObject.objectId
) 的 Entity
保存到本地核心数据存储。Alamofire
POST
请求将 Entity
发送到服务器。NSManagedObject.objectId
)。因此本地实体 id 将使用服务器 id 进行更新。transaction.importUniqueObjects
。在此步骤中,我想通知我的数据源有关更改的信息。并使用更新的标识符重新获取数据。
所以我的DataSource
在数组中有一些Entities
,当我使用这个数据源来显示数据时,它仍然是我之前获取的数组中的静态信息,但是作为您可以在第 4 步中看到,我已经通过 CoreStore
导入更新了核心数据存储,并且希望 DataSource 的数组也更新。
我在CoreStore中找到了一些关于ListMonitor的信息并尝试使用它。正如我所看到的,这个方法在更新时有效
func listMonitorDidChange(_ Monitor: ListMonitor)
但我尝试以某种方式重新获取数据。看起来监视器已经包含一些最新信息。
但是当我这样做时:
func listMonitorDidChange(_ monitor: ListMonitor<MyEntity>) {
let entities = try? CoreStore.fetchAll(
From<MyEntity>()
.orderBy(.ascending(\.name))
) // THERE IS STILL old information in database, but monitor instance shows new info.
}
然后代码就变成了这样:
func listMonitorDidChange(_ monitor: ListMonitor<MyEntity>) {
var myEntitiesFromMonitor = [MyEntity]()
for index in 0...monitor.numberOfObjects() {
myEntitiesFromMonitor.append(monitor[index])
}
if myEntitiesFromMonitor.count > 0 {
// HERE we update DataSource
updateData(with: myEntitiesFromMonitor)
}
}
不确定我是否走对了路。
最佳答案
如有错误,请指正:
据我了解,每次核心数据因新更改而更新时,监视器也会更新。我还没有深入研究它是如何通过一些 CoreData 上下文通知或其他方式实现的,但是当您通过 CoreStore 事务执行某些操作(例如创建、更新或删除对象或任何您想要的操作)后,监视器就会更新。它还具有您需要在您想要观察数据模型的任何更改的类中实现的回调函数:
您的类,例如数据源或某些服务,甚至某些 View Controller (如果您不使用任何 MVVP 或 VIPER 或其他设计模式)需要符合 ListObserver
协议(protocol),以防您想要不要只听一个物体。
这些功能如下:
func listMonitorDidChange(monitor: ListMonitor<MyPersonEntity>) {
// Here I reload my tableview and this monitor already has all needed info about sections and rows depend how you setup monitor.
// So you classVariableMonitor which I provide below already has up to date state after any changes with data.
}
func listMonitorDidRefetch(monitor: ListMonitor<MyPersonEntity>) {
// Not sure for which purposes it. I have not received this call yet
}
typealias ListEntityType = ExerciseEntity
let classVariableMonitor = CoreStore.monitorSectionedList(
From<ListEntityType>()
.sectionBy(#keyPath(ListEntityType.muscle.name)) { (sectionName) -> String? in
"\(String(describing: sectionName)) years old"
}
.orderBy(.ascending(\.name))
.where(
format: "%K == %@",
#keyPath(ListEntityType.name),
"Search string")
)
记录的所有其他内容 here这样您就可以找到如何在 tableview 数据源函数中从监视器中提取信息的信息。
感谢@MartinM 的建议!
关于ios - CoreStore如何观察数据库的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57429039/
我在 Swift 5 中使用 CoreData 的 CoreStore 包装器 import CoreStore @objc(Post) public class Post: NSManagedObj
我要解决下一个问题: 我想在上下文中使用一些 NSManagedObject 并在运行时更改一些属性,但不告诉 SQLite 其中的任何更改。 我只想在点击保存按钮或类似按钮时将 NSManagedO
我使用这段代码来创建一个对象: CoreStore.perform( asynchronous: { (transaction) -> Void in
我有下一个代码来更新我的锻炼: func addMuscleGroups(muscleGroups: [MusclEntity], toWorkout: WorkoutEntity, completi
我有 NSManagedObject 数据模型 ExerciseEntity 我也有数据模式 MuscleEntity。我可以通过 exercise.muscle 访问肌肉对象 我添加了 CoreSt
我找到了我认为不错的图书馆 CoreStore正如我们所见,它们提供了导入和唯一导入以及可导入协议(protocol)背后的映射功能,我们需要在 NSManagedObject 对象子类中实现这些功能
我想通过删除关系中的一些对象来更新我的核心数据对象。 我知道 CoreStore 提供了很少的更新和删除方法。我的问题是我可以使用更新功能删除吗? let john: MyPersonEntity .
我的初始化方法中有这段代码: self.monitor = CoreStore.monitorSectionedList( From() .sectionBy(
我想使用 UITableview 实现分页类型的用户界面,以便一旦用户在滚动时最后记录,我想使用 CoreStore 从本地数据库中获取下一组记录。 是否CoreStore查询时支持这种功能吗? 最佳
在我使用 CoreStore 5.3 的应用程序中,我试图将我的本地 sqlite 存储移动到另一个位置,以便能够从应用程序扩展访问数据库。使用 FileManager.default.moveIte
我从文档中找到这段代码: let jane: MyPersonEntity = // ... CoreStore.perform( asynchronous: { (transaction)
如果我弄清楚了,我需要在搜索某些内容时重新获取监视器: 我有这个函数来重新获取提供的字符串 func search(searchText: String) { self.monitor
我是一名优秀的程序员,十分优秀!