我们在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很新,所以对我来说一切都还是新的。谢谢!
修改
下面的解决方案解决了我原来的问题,但我留下了两个新问题:
答案 0 :(得分:0)
所以,我已修复它,并且修复程序产生了更多问题。
在实体编辑器中,我选择了实体“文件”,在右侧的实体菜单中(右侧菜单上的第三个选项卡,我注意到父实体下拉列表,选择了父实体,而所有其他人都没有“没有父实体”。这样做,从模拟器上删除我的应用程序并刷新,功能恢复,CoreData恢复正常功能。
这已经打开了两个跟进问题: 1.为什么我不能从菜单Editor-> Create NSManagedObject Subclass中自动生成子类。 2.我应该如何格式化我的子类“Files”以从父实体继承,因为原始功能是必需的。