我試圖將NSCoding的方法從我的實際類中分離爲單獨的文件。我知道你通常可以在Objective-C中使用類別定義新方法,但似乎Xcode仍然在主類文件中沒有遇到-encodeWithCoder:和-initWithCoder:方法時發送警告。在主類的單獨.m文件中實現objc協議方法?
我這樣做的原因(並希望這聽起來不太複雜)是我有很多分散在各種文件中的類,爲了避免寫出encodeWithCoder的繁瑣冗餘:/ initWithCoder :爲每個類添加方法,我將一個小腳本放在一起,自動解析頭文件並根據變量類型生成必要的編碼/解碼代碼,並將結果轉儲到單個Encoders.m中。結果鏈接正常,但編譯期間仍然收到警告「類'MyClass'的未完成實現'」,'-initWithCoder:'找不到'的方法定義'(等),以及「Class'MyClass'未完全實現'NSCoding'協議「。我試着簡單地將聲明添加到類的.h文件中,但是沒有去。
有什麼辦法可以告訴Xcode這些方法實際上已經實現了,只是不在非Category類文件中?
簡化示例:
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