CoreData:警告:无法为实体“读取”加载名为“WEEReadings”的类。找不到类,而是使用默认的NSManagedObject

问题描述 投票:5回答:2

好的,这是社区帮助的时间,经过数小时和数小时的搜索。

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

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

在我的ReadingsCoreDataModel.momd中,我创建了一个具有名称读数和类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进行故障排除,或者使用模型进行拼写错误,其他建议使用与应用程序名称相同的模型名称,我不认为我可以这样做或者它与错误有关。

我的静态库中的所有标题都是Project,除了暴露给客户端的那些标题添加为Public。还尝试将它们全部添加为公共但它没有任何区别。

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

看起来核心数据模型已正确加载但无法找到我的类,该类肯定包含在框架中包含的静态库中。

在我注册疯人之前的任何想法?

ios objective-c core-data static-libraries resourcebundle
2个回答
3
投票

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


0
投票

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

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

将其更改为可能会解决问题:

final class Model: NSManagedObject {
  // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.