2

我收到以下错误:

“-[订单项]:无法识别的选择器发送到实例 0x6b5f240”

我确实有一个名为 Order 的类,它看起来像这样:

订单.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class OrderItem;

@interface Order : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * orderID;
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSNumber * orderCode;
@property (nonatomic, retain) NSSet* items;

@end

订单.m

#import "Order.h"
#import "OrderItem.h"


@implementation Order
@dynamic orderID;
@dynamic date;
@dynamic orderCode;
@dynamic items;

...

如果我没看错的话,它不会扩展任何具有“items”方法的类吗?

有没有其他原因我会收到这样的错误。更疯狂的是,这个项目直接从以前的项目中复制而来,并进行了一些小的编辑。我已经对两个项目中的每个类都进行了文本比较,除了我所做的外观更改之外没有任何区别。

4

1 回答 1

6

@dynamic items告诉编译器您将为items.

由于这在以前的项目中有效,因此它必须在 .m 文件中的某处具有以下方法:

- (NSSet *)items {
    // Appropriate code
}

如果您不想像这样提供自己的自定义 getter,则更@dynamic items改为@synthesize items,编译器将为您生成一个。

有关更多详细信息,请参阅Apple 在此处提供 的 Objective-C 编程语言的声明属性部分: https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html

编辑
虽然以上所有内容仍然适用于普通对象(并且可能仍然适用于此处),但我只是注意到这是NSManagedObject.

在您的旧数据模型中,可能存在调用关系items,因此 NSManagedObject 提供了适当的方法,并且@dynamic适用于防止编译器警告。

如果在您的新数据模型中没有名为的关系items,则不会生成方法,这将导致您遇到的问题。

于 2012-05-06T20:49:50.277 回答