multithreading - 核心数据 : warning: Unable to load class named

标签 multithreading core-data swift nsmanagedobject

我正在使用 Xcode 6.1 将现有的 Objective-C TV Show 应用复制到新的 Swift 版本,但 CoreData 存在一些问题。

我创建了 4 个实体的模型,创建了它们的 NSManagedObject 子类(在 Swift 中),并且所有文件都设置了正确的应用程序目标(用于“编译源”)。

每当我尝试插入新实体时,我仍然收到此错误:

CoreData: warning: Unable to load class named 'Shows' for entity 'Shows'. Class not found, using default NSManagedObject instead.

一些评论:

保存到核心数据时,我使用父子上下文方式来允许后台线程。我通过使用以下方法设置 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...
})

最佳答案

这个警告是我们在解决 Swift 实现细节时必须处理的怪癖之一。该警告是虚假出现的,即即使您不按照下面概述的步骤进行操作,您的设置也可能会正常工作。

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

请务必检查这三项:

1.
适用于 Xcode 7 beta 3 的版本

Up to XCode7 b3

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

适用于 Xcode 7.1 中的 Swift 2.0 的版本
(应该适用于 Xcode 7 beta 4 及更高版本)

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

From Xcode7 beta 3

2.
您还应该遵循频繁的建议以包括

@objc(Show)

就在你的类(class)上方。

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

3.
还要确保将创建的托管对象强制转换到正确的类,因为默认为NSManagedObject

var newShow = NSEntityDescription.insertNewObjectForEntityForName("Show", 
                 inManagedObjectContext: context) as Show

关于multithreading - 核心数据 : warning: Unable to load class named,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813724/

相关文章:

swift - "Charts"(IOS) xcode 9.0 编译错误 : "static var ' defaultFormatter ' is not public"

swift - Swift 中的网址图片

ios - while循环不使用定时器执行

java - 只有一个线程需要同步吗

java - Java中全局锁的实现

iphone - 保存上下文中的 CoreData 错误,NSPersistentStoreCoordinator 没有持久存储

ios - 关于iCloud+核心数据的问题

c# - 在多线程中使用 WebBrowser 时出现访问冲突

java - fork-join 有工作要做时没有工作线程?

swift - 核心数据 : prepare for segue NSManagedObject issue in Swift 3