【问题标题】:XCode: Unrecognized selector sent to instanceXCode:发送到实例的无法识别的选择器
【发布时间】:2012-05-06 20:44:18
【问题描述】:

我收到以下错误:

"-[Order items]: 无法识别的选择器发送到实例 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”方法的类吗?

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

【问题讨论】:

  • 你是从 .xcdatamodeld 文件中生成这个类的吗?

标签: objective-c xcode debugging selector


【解决方案1】:

@dynamic items 告诉编译器您将为items 提供方法。

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多