首页 文章

CoreData使用父实体创建NSManagedObject子类

提问于
浏览
0

我们在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很新,所以对我来说一切都还是新的 . 谢谢!

EDIT

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

  • 为什么我不能从菜单Editor-> Create NSManagedObject Subclass中自动生成子类 .

  • 如何将我的子类"Files"格式化为从父实体继承,作为原始功能的指示 .

1 回答

  • 0

    所以,我已经修复了它,并且通过修复创建了更多问题 .

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

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

相关问题