NSCodingのメソッドを実際のクラスから別々のファイルに分割しようとしています。 Objective-Cでカテゴリを使用して新しいメソッドを定義することは一般的にはわかっていますが、マスタクラスファイルの-encodeWithCoder:および-initWithCoder:メソッドが見つからない場合でも警告が送信されるようです。メインクラスとは別の.mファイルにobjcプロトコルメソッドを実装していますか?
私がこれをやっている理由は(そしてうまくいけばそれほど複雑ではない)というのは、私はさまざまなファイルにまたがって数十のクラスが広がっていて、encodeWithCoder:/ initWithCoder :それぞれのクラスごとにメソッドを作成し、ヘッダーファイルを自動的に解析し、変数型に基づいて必要なエンコード/デコードコードを生成し、結果を単一のEncoders.mにダンプするための小さなスクリプトをまとめました。結果は正しくリンクされていますが、コンパイル時に警告が表示されます。 "クラス 'MyClass'の実装が不完全で、 '-initWithCoder:'が見つかりませんでした '(など)、"クラス' MyClass ' 'NSCoding'プロトコル。私は単にクラスの.hファイルに宣言を追加しようとしましたが、行っていません。
実際にメソッドが実装されていることをXcodeに知らせる方法はありますか?カテゴリ以外のクラスファイルではないのですか?
簡略化した例:
MyClass.h
@interface MyClass : NSObject <NSCoding> {
int num; //@ENCODABLE
float timer; //@ENCODABLE
SomeOtherClass *obj; //@ENCODABLE
}
...
@end
MyClass.m
#import "MyClass.h"
@implementation MyClass
...
@end
Encoders.m
#import "MyClass.h"
@implementation MyClass (Encoding)
-(void) encodeWithCoder:(NSCoder*)encoder {
// Auto-generated encoding of instance variables
}
-(id) initWithCoder:(NSCoder*)decoder {
if (self = [self init]) {
// Auto-generated decoding of instance-variables
}
return self;
}
@end
、ありがとう! – ccjuju