为了账号安全,请及时绑定邮箱和手机立即绑定

CoreData:警告:无法加载名为的类

CoreData:警告:无法加载名为的类

慕标5832272 2019-10-17 15:31:31
我正在使用Xcode 6.1将现有的Objective-C电视节目应用程序复制到新的Swift版本,并且CoreData出现了一些问题。我创建了一个包含4个实体的模型,创建了它们的NSManagedObject子类(在Swift中),并且所有文件都设置了正确的应用程序目标(针对“编译源”)。每当我尝试插入新实体时,我仍然会收到此错误:CoreData:警告:无法为实体“ Shows”加载名为“ Shows”的类。找不到类,而是使用默认的NSManagedObject。一些评论:当保存到Core Data时,我使用父子上下文方法来允许后台线程。我通过使用以下方法设置ManagedObjectContext来做到这一点:lazy var managedObjectContext: NSManagedObjectContext? = {  // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.  let coordinator = self.persistentStoreCoordinator  if coordinator == nil {    return nil  }  var managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)  managedObjectContext.persistentStoreCoordinator = coordinator  return managedObjectContext}()并使用以下方法保存数据:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in  var context = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)  context.parentContext = self.managedObjectContext!  ...rest of core data saving code here...})
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

这个警告是我们正在解决Swift实施细节时要处理的怪癖之一。该警告是虚假的,也就是说,即使您不遵循以下概述的步骤,您的设置也可能会起作用。


在大多数情况下,通过确保在模型编辑器中正确设置了类,我可以摆脱它。与许多其他SOF帖子(包括对该问题的答案)不同,包含模块名称(如MyApp.Shows)的建议对我没有帮助。


确保检查以下三个项目:


1. 

适用于Xcode 7 beta 3的版本


最高XCode7 b3


请注意,我已将您的实体名称更正为更合适的单数。


适用于Xcode 7.1中的Swift 2.0的版本

(应适用于Xcode 7 beta 4及更高版本)


您需要在模块中删除文本“当前产品模块”!


从Xcode7 beta 3开始


2.

您还应该遵循经常性的建议,包括


@objc(Show)

就在你班上


注意:如果您使用的是Xcode 7 beta 4或更高版本,则此步骤是可选的。


3.

还要确保投所创建的管理对象到适当的类,作为默认的将只是NSManagedObject。


var newShow = NSEntityDescription.insertNewObjectForEntityForName("Show", 

                 inManagedObjectContext: context) as Show


查看完整回答
反对 回复 2019-10-17
?
白衣非少年

TA贡献1155条经验 获得超0个赞

在Xcode 6.1.1中,您不需要添加@objc属性,因为基本实体是objc类(NSManagedObject)的子集(请参阅Swift Type Compatibility。在CoreData中,需要完整的Module.Class名称。请注意Module名称是在“构建设置”->“包装”->“产品模块名称”中设置的名称。默认情况下,此名称设置为$(PRODUCT_NAME:c99extidentifier),将成为目标的名称。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 545 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信