【问题标题】:CoreData: warning: Unable to load class named 'WEEReadings' for entity 'Readings'. Class not found, using default NSManagedObject insteadCoreData:警告:无法为实体“Readings”加载名为“WEEReadings”的类。找不到类,而是使用默认的 NSManagedObject
【发布时间】:2015-02-12 10:53:01
【问题描述】:

好的,经过数小时的搜索,是时候寻求社区帮助了。

我有一个静态库,使用这个很棒的script 我生成了包含通用静态库的静态框架,还创建了一个包含 ReadingsCoreDataModel.momd 的包,其中包含 ReadingsCoreDataModel.mom。很好,我将这些提供给我的客户端 iOS 应用程序,全部正确构建并启动与我的框架扭结的应用程序并使用捆绑包,我的静态库中有一个单独的 WEEDataStore 类,由另一个名为 Worker 的类使用,检查,NSManagedObjectModel 不是nil 并且看起来加载正确,NSPersistentStoreCoordinator 不是 nil,NSManagedObjectContext 不是 nil。

在 WEEDataStore 中,我有一个保存方法,我从静态库中的 Worker 类调用它。

在我的 ReadingsCoreDataModel.momd 中,我创建了一个具有 Name Readings 和类 WEEReadings 的实体。

我在 Worker 类中执行以下操作

WEEReadings* readingsEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Readings" inManagedObjectContext:[[WEEDataStore sharedInstance] managedContext]];
[readingsEntity appendWithReadingsModel:self.readingsModel];
[[WEEDataStore sharedInstance] save];

结果是得到如下错误

CoreData: warning: Unable to load class named 'WEEReadings' for entity 'Readings'.  Class not found, using default NSManagedObject instead.
2014-12-13 20:11:30.080 TestClient[6854:2487108] -[NSManagedObject appendWithReadingsModel:]: unrecognized selector sent to instance 0x1700ccda0
2014-12-13 20:11:30.084 TestClient[6854:2487108] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject appendWithReadingsModel:]: unrecognized selector sent to instance 0x1700ccda0'

我几乎阅读了所有类似的错误,大多数使用 Swift 进行故障排除,或模型的拼写错误,其他建议与应用程序名称具有相同的模型名称,我认为我不能这样做或者它是相关的到错误。

我的静态库中的所有标题都是项目,除了公开给客户端的被添加为公共的标题。还尝试将它们全部添加为公开,但没有任何区别。

所有核心数据操作都是内部的。

Core Data 模型似乎已正确加载,但找不到我的类,该类肯定包含在框架中包含的静态库中。

在我注册疯屋之前有什么想法吗?

【问题讨论】:

  • 将 -ObjC 链接器标志添加到您的项目以强制链接器从您的库中加载所有类。运行nm mylib.a 并确保您的类以二进制形式存在。如果这两个都不能解决你的问题,我们可以一起去疯人院。
  • 您是否通过具有相同的类和实体名称进行检查?
  • 我不敢相信我忘记在我的客户端测试应用程序中添加 -ObjC 标志。 Adeel,这应该没关系。 @Andy 回答以下问题,以便我将其标记为正确!谢谢。
  • 在下面发布答案。

标签: ios objective-c core-data static-libraries resourcebundle


【解决方案1】:

-ObjC链接器标志添加到您的项目以强制链接器从您的库中加载所有类。

【讨论】:

    【解决方案2】:

    我最近遇到了类似的问题。 -ObjC 链接器标志,如该问题的不同答案中所述,没有帮助。原来我的NSManagedObject 子类有@objc 属性,所以如果你有

    @objc(Model)
    final class Model: NSManagedObject {
      // ...
    }
    

    改成这个可能会解决问题:

    final class Model: NSManagedObject {
      // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多