objective-c - XCode:发送到实例的无法识别的选择器

标签 objective-c xcode debugging selector

我收到以下错误:

"-[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 LanguageDeclared 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/

相关文章:

ios - 如何获取childViewController中的parentViewController?

xcode - UNUserNotificationCenter 确实收到了完成处理程序的响应,从未被称为 iOS10,swift 2.3

iphone - 基于服务器的数据库

objective-c - 显示/隐藏标签(带切换按钮)

c - 编写 GDB 脚本来收集数据

Android Soundpool.play() 在发布版本中不起作用

ios - UIPopoverController 解雇出现奇怪的延迟

ios - 如何识别 UITextField 中的攻击性词语?

android - Kotlin调试无法在Visual Studio代码中启动

ios - 苹果手机SDK : how to distinguish between touch and drag