【问题标题】:CoreData throws warning that class for entity could not be loadedCoreData 抛出警告实体类无法加载
【发布时间】:2015-09-02 08:34:10
【问题描述】:

我正在用 Objective-C 编写一个 OS X 命令行工具,它使用来自外部框架的 CoreData 模型。该框架为核心数据模型定义了每个类。在我的项目中通过包含归档框架来引用头文件。但是在创建NSEntityDescription 时我仍然收到警告,该NSManagedObject 被强制转换为特定的NSManagedObject 类:

Klass entity = (Klass *)[NSEntityDescription insertNewObjectForEntityForName:@"Klass" inManagedObjectContext:context];

Xcode 在执行上述代码时会抛出以下警告:

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

我搜索了解决方案,但无法找到并解决我的问题。我试图命名模型中的实体。但这不起作用。

我希望你能帮助我。

【问题讨论】:

  • 请出示您的 Klass.h 和 Klass.m(是真名吗?)它们是否包含在目标中?可以加个截图吗?

标签: objective-c macos core-data xcode6


【解决方案1】:

我能够解决我的问题。最初我尝试创建一个新实体并将其强制转换为特定的 NSManagedObject 类。

SpecificManagedObjectClass *managedObject = (SpecificManagedObjectClass *)[NSEntityDescription insertNewObjectForEntityForName:@"SpecificManagedObjectClass" inManagedObjectContext:context];

现在我的具体问题的解决方案如下:

NSEntityDescription *entity = [NSEntityDescription entityForName:[SpecificManagedObjectClass className] inManagedObjectContext:context];
SpecificManagedObjectClass *managedObject = [[SpecificManagedObjectClass alloc] initWithEntity:entity insertIntoManagedObjectContext:context];

于是我写了一个辅助方法:

- (id)getManagedObjectInstanceFor:(id)managedObject in:(NSManagedObjectContext *)context {
    NSEntityDescription *entity = [NSEntityDescription entityForName:[managedObject className] inManagedObjectContext:context];
    return [[[managedObject class] alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
}

这会导致以下调用:

SpecificManagedObjectClass *managedObject = [[Utils sharedInstance] getManagedObjectInstanceFor: SpecificManagedObjectClass.class in:self.managedObjectContext];

这给了我一个特定 NSManagedObject 类的实例。

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2014-12-24
    • 1970-01-01
    • 2015-01-29
    • 2016-04-05
    • 2023-03-06
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多