2

次のエラーが発生します。

"-[注文アイテム]:認識されないセレクターがインスタンス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;

...

私がそれを正しく読んでいるなら、それは「items」メソッドを持つどんな種類のクラスも拡張しませんか?

私がそのようなエラーを受け取る他の理由はありますか?狂気に追加するために、このプロジェクトは、いくつかのマイナーな編集を加えて、前のプロジェクトから直接コピーされます。私は両方のプロジェクトのすべてのクラスでテキスト比較を行いましたが、私が行った外観上の変更以外に違いはありません。

4

1 に答える 1

6

@dynamic itemsのメソッドを提供することをコンパイラーに通知しますitems

これは前のプロジェクトで機能していたため、.mファイルのどこかに次のメソッドが含まれている必要があります。

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

このような独自のカスタムゲッターを提供したくない場合は、に変更@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 に答える