CoreData使用父实体创建NSManagedObject子类

时间:2014-11-11 20:23:00

标签: ios core-data swift

我们在Swift中有一个拥有10-12个数据模型的应用程序。设置它们的开发人员在.xcdatamodeld文件中生成它们,然后我为它们编写了扩展。

我已经明白应用程序中我意识到他无法为名为“Files”的数据模型之一生成子类。我尝试使用编辑器添加它 - >创建NSManagedObject子类,并在向导完成时,不会出现错误,但子类也不会出现。假设它可能是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很新,所以对我来说一切都还是新的。谢谢!

修改

下面的解决方案解决了我原来的问题,但我留下了两个新问题:

  1. 为什么我不能从菜单Editor-> Create NSManagedObject Subclass中自动生成子类。
  2. 我应该如何格式化我的子类“Files”以从父实体继承,因为原始功能是必需的。

1 个答案:

答案 0 :(得分:0)

所以,我已修复它,并且修复程序产生了更多问题。

在实体编辑器中,我选择了实体“文件”,在右侧的实体菜单中(右侧菜单上的第三个选项卡,我注意到父实体下拉列表,选择了父实体,而所有其他人都没有“没有父实体”。这样做,从模拟器上删除我的应用程序并刷新,功能恢复,CoreData恢复正常功能。

这已经打开了两个跟进问题: 1.为什么我不能从菜单Editor-> Create NSManagedObject Subclass中自动生成子类。 2.我应该如何格式化我的子类“Files”以从父实体继承,因为原始功能是必需的。