我收到以下错误:
“ - [订单商品]:无法识别的选择器发送到实例0x6b5f240”
我有一个名为Order的类,如下所示:
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
Order.m
#import "Order.h"
#import "OrderItem.h"
@implementation Order
@dynamic orderID;
@dynamic date;
@dynamic orderCode;
@dynamic items;
...
如果我正确阅读它,它不会扩展任何具有“项目”方法的类吗?
还有其他原因我会遇到这样的错误。为了增加这种疯狂,这个项目直接从以前的项目中复制,并进行了一些小的编辑。我已经对两个项目中的每个班级进行了文本比较,除了我所做的外观变化之外没有其他区别。
答案 0 :(得分: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
的关系,则不会生成方法,这将导致您遇到的问题。