CoreData 使用父实体创建 NSManagedObject 子类
Posted
技术标签:
【中文标题】CoreData 使用父实体创建 NSManagedObject 子类【英文标题】:CoreData creating an NSManagedObject Subclass with a Parent Entity 【发布时间】:2014-11-11 20:23:00 【问题描述】:我们有一个 Swift 应用程序,它有 10-12 个数据模型。设置它们的开发人员在 .xcdatamodeld 文件中生成它们,我已经为它们编写了扩展。
在应用程序中,我意识到他未能为名为“文件”的数据模型之一生成子类。我尝试使用 Editor -> Create NSManagedObject Subclass 添加它,向导完成后,没有出现错误,但子类也没有出现。假设它可能是 XCode 中的错误,我按照其他格式编写了自己的 Files 子类。它非常基本:
import Foundation
import CoreData
class Files: NSManagedObject
@NSManaged var localUrl: String
@NSManaged var remoteUrl: String
@NSManaged var type: String
@NSManaged var translationFromAudio: NSSet
@NSManaged var translationToAudio: NSSet
在此之后,我继续为我们的项目解析 JSON 并将数据推送到 coreData
let entityDescription: AnyObject = NSEntityDescription.entityForName("Files", inManagedObjectContext: context)!
var request = NSFetchRequest(entityName: "Files")
request.predicate = NSPredicate(format: "remoteUrl == %@", urlString)
var file:Files
var results = context.executeFetchRequest(request, error: nil)! as NSArray
if results.firstObject != nil
file = results.firstObject as Files
else
file = Files(entity: entityDescription as NSEntityDescription, insertIntoManagedObjectContext: context)
file.remoteUrl = audiostring
file.type = "Institutional"
//All the other properties on a file are optional, so I did not include them
一切正常且花花公子(这与我们用来将其他所有内容保存到 CoreData 中的格式相同,只是替换了 File 的属性)在所有解析完成后运行 context.save() 以加速应用程序,但它叫做。
当我尝试运行 FetchRequest 从 coreData 获取所有文件时,疯狂的事情开始发生。它以 0 个对象的形式返回,但所有其他 coreData 模型都返回。
然后我尝试从模拟器中删除应用程序并重新加载它,在再次解析后执行此操作时,根本没有任何内容保存到核心数据中。
我已经回滚了两次我的代码,并且仔细地做了所有的事情,结果还是一样。我猜这可能与 Files 子类未正确生成的原始问题有关。任何关于如何刷新你的子类的信息,或者关于我可能做错的想法都非常感谢,我对 Swift 和 XCode 还很陌生,所以一切对我来说仍然很新。谢谢!
编辑
下面的解决方案解决了我原来的问题,但我还有两个新问题:
-
为什么我不能从菜单 Editor->Create NSManagedObject Subclass 自动生成子类。
我应该如何格式化我的子类“文件”以从父实体继承原始功能。
【问题讨论】:
【参考方案1】:所以,我已经修复了它,并且修复后产生了更多问题。
在实体编辑器中,我选择了实体“文件”,在右侧的实体菜单中(右侧菜单的第三个选项卡,我注意到父实体下拉菜单选择了一个父实体,而所有其他人都有“没有父实体”。这样做后,将我的应用程序从模拟器中删除并刷新,功能恢复,CoreData 恢复其正常功能。
这引发了两个后续问题: 1. 为什么我不能从菜单Editor->Create NSManagedObject Subclass 中自动生成子类。 2. 我应该如何格式化我的子类“文件”以从父实体继承作为原始功能所指示的。
【讨论】:
以上是关于CoreData 使用父实体创建 NSManagedObject 子类的主要内容,如果未能解决你的问题,请参考以下文章
NSManagedObject CoreData 中的父子层次结构
自定义 NSFetchreqeust - 按子 NSSet 属性排序父实体 [MagicalRecord+Coredata]