SuperAPI AI 工具集

core-data

编程与开发

查看项目

更新于 10-16 05:52

技能介绍

用途:为尚未采用 SwiftData 的应用构建和维护 Core Data 数据持久化,并可用于代码审查。

主要能力: 堆栈搭建与并发:上下文绑定队列,viewContext 在主队列,后台任务用 newBackgroundContext();访问需包裹在 context.perform(:) 或 performAndWait(:) 中;禁止跨上下文或线程传递 NSManagedObject,应传递 NSManagedObjectID 并用 existingObject(with:) 重新获取;在 viewContext 上设置 automaticallyMergesChangesFromParent = true 和 mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy。 NSFetchedResultsController:用 NSFetchRequest 驱动 UI 集合并自动跟踪变更;fetch 请求必须至少提供一个排序描述符;iOS 13+ 可用 diffable 快照(controller(_:didChangeContentWith:))驱动动画;更改 predicate 或排序描述符前用 deleteCache(withName:) 删除缓存,或传 cacheName: nil。 批量操作:NSBatchInsertRequest、NSBatchUpdateRequest、NSBatchDeleteRequest 直接在 SQLite 层执行,绕过托管对象上下文;需设置 resultType 为 .objectIDs 或 .resultTypeObjectIDs,并用 mergeChanges(fromRemoteContextSave:into:) 手动合并到活动上下文;批量删除会绕过关系删除规则(如 Deny)。 持久化历史跟踪:在存储选项中启用 NSPersistentHistoryTrackingKey: true,用 NSPersistentHistoryChangeRequest 查询变更并合并到本地上下文,定期用截断请求清理已消费事务以防数据库膨胀。 分阶段迁移与共存:iOS 17+ 可用 NSStagedMigrationManager 配合轻量与自定义阶段(NSCustomMigrationStage)实现确定性升级;与 SwiftData 共享数据库文件时需指向同一存储 URL,保留模型 schema 与属性名,并用 @Attribute(originalName:) 映射重命名。 测试:使用 NSInMemoryStoreType 做确定性单元测试,并在测试间共享单个已编译的 NSManagedObjectModel 实例。

常见错误:跨线程传递 NSManagedObject、批量请求后遗漏 mergeChanges、无变更时调用 save()、viewContext 未设置 mergePolicy、将 NSManagedObject 标记为 Sendable。

限制:资料未提供具体价格、收费、平台范围或效果数据;部分细节见所引用的 references 文档(patterns、persistent-history、staged-migration)。