我收到以下错误:
"-[Order items]: unrecognized selector sent to instance 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”方法的类?
是否有任何其他原因会导致我收到此类错误。更疯狂的是,这个项目是直接从以前的项目复制的,有一些小的编辑。我对这两个项目中的每个类都进行了文本比较,除了我所做的外观更改外,没有其他区别。
最佳答案
@dynamic items
告诉编译器您将为 items
提供方法。
因为这是在以前的项目中工作的,所以它一定在 .m 文件的某处有以下方法:
- (NSSet *)items {
// Appropriate code
}
如果您不想像这样提供自己的自定义 getter,请将 @dynamic items
更改为 @synthesize items
,编译器将为您生成一个。
有关详细信息,请参阅 Apple 在此处提供的 The Objective-C Programming Language 的Declared Properties 部分:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html
编辑
虽然上面的所有内容仍然适用于普通对象(并且可能仍然适用于此处),但我只是注意到这是 NSManagedObject
的子类。
在您的旧数据模型中,可能存在称为 items
的关系,因此 NSManagedObject 提供了适当的方法,并且 @dynamic
适合防止编译器警告。
如果在您的新数据模型中没有名为 items
的关系,则不会生成这些方法,这将导致您遇到的问题。
关于objective-c - XCode:发送到实例的无法识别的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474138/