【问题标题】:Core Data images "unrecognised selector..."核心数据图像“无法识别的选择器......”
【发布时间】:2012-09-10 15:51:44
【问题描述】:

我有一个数据模型,其中包含一个名为 Image 的实体。这将用于存储图像。

以前我将图像作为特定实体的属性。

我设置了可变形的东西,一切都奏效了。

但是,现在我将它移到了一个单独的实体中,但我不断收到错误。

所以...这是 Image.m 文件的内容。

#import "Image.h"
#import "Person.h"

@implementation ImageToDataTransformer


+ (BOOL)allowsReverseTransformation {
    return YES;
}

+ (Class)transformedValueClass {
    return [NSData class];
}


- (id)transformedValue:(id)value {
    NSData *data = UIImagePNGRepresentation(value);
    return data;
}


- (id)reverseTransformedValue:(id)value {
    return [[UIImage alloc] initWithData:value];
}

@end

@implementation Image

@dynamic image;
@dynamic createdDate;
@dynamic person;

@end

当我保存它时它不会抱怨当我创建它时它不会抱怨,我什至可以在 Person 实体中将它视为一个对象。

(Person *) $0 = 0x1002dec0 <Person: 0x1002dec0> (entity: Person; id: 0x4f8f30 <x-coredata://2800C028-8745-45FE-854B-5783FF3FC173/Person/p6> ; data: {
    avatar = "0x1007e540 <x-coredata://2800C028-8745-45FE-854B-5783FF3FC173/Image/p1>";
    createdDate = nil;
    email = nil;
    firstname = Blah;
    id = "1234567890987654321234567890";
    lastName = Blah;
    updatedDate = nil;
})

avatar 属性是与 Image 实体的关系(一对一)。

但是如果我尝试访问图像的任何属性,我会得到这个......

-[_NSObjectID_64_2 createdDate]: unrecognized selector sent to instance 0x1007e540
-[_NSObjectID_64_2 image]: unrecognized selector sent to instance 0x1007e540

等等等等……

产生错误的代码...

NSFetchRequest *request = [NSFetchRequest fetchRequestForEntityName:@"Person"];

[request setPredicate... blah];
NSArray *results = [context executeFetchRequest...];

Person *person = [results objectAtINdex:0];

NSLog(@"%@", person.firstName); //this works fine.
NSLog(@"%@", person.avatar.createdDate); //this crashes.

尝试删除图像属性,但仍然遇到同样的问题。

【问题讨论】:

  • 导致错误的代码在哪里?
  • 现在您可以向我们展示您的数据模型)这可能也有帮助

标签: iphone ios core-data uiimage


【解决方案1】:

鉴于您正在生成的崩溃类型,请确保您在使用核心日期建模工具时分配了正确的类名。默认情况下,它不会使用实体名称创建子类,而是让您通过使用键值编码来访问属性值。去做你的建模工具,选择实体,然后在实用程序面板上的模型数据检查器上检查类名。

【讨论】:

  • 啊,我以为你已经明白了,但它已经正确填充了。我使用生成器来创建子类,因此它会自动填充。
  • 生成器会生成类文件,但在运行时,类名会显示为NSManagedObject。检查核心数据模型上模型数据检查器的类名。或者,您可以打印调试器指向的地址。应该给你记录的类名。如果它是 NSManagedObject 子类,则您的类没有正确生成。如果是,那么问题的性质不同。
  • 实际上,通过查看崩溃,问题具有不同的性质。该类的运行时值为_NSObjectID_64_2,即NSManagedObjectID。检查您的关系配置。
  • 他烦人的事情是我已经通过 Core Data 在这个项目上建立了很多关系,这也不例外。我现在已经从实体中删除了图像,所以它只有一个日期和与 Person 的关系。还是一样的问题。
【解决方案2】:

嗯,这太奇怪了。

我删除了实体并重新添加了它......仍然是同样的问题。

我再次删除它并添加了一个名为“StoredImage”而不是“Image”的实体,它运行良好,完全没有问题。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多