首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在与主类分离的.m文件中实现objc协议方法?

在与主类分离的.m文件中实现objc协议方法?
EN

Stack Overflow用户
提问于 2011-08-27 16:36:28
回答 1查看 2.8K关注 0票数 3

我试图将NSCoding的方法从实际的类中分离到单独的文件中。我知道您通常可以使用Objective中的类别来定义新方法,但似乎Xcode在没有遇到主类文件中的-encodeWithCoder:和-initWithCoder:方法时仍然会发送警告。

我这么做的原因(希望这听起来不太复杂)是因为我有几十个类分布在不同的文件中,为了避免编写encodeWithCoder:/initWithCoder:方法的冗长和冗余,我编写了一个小脚本来自动解析头文件,根据变量类型生成必要的编码/解码代码,并将结果转储到单个Encoders.m中。结果链接正确,但是在编译“类'MyClass‘的不完全实现”、“’-initWithCoder的方法定义:‘not”(等等)和"Class’MyClass‘没有完全实现'NSCoding’协议“时,我仍然收到警告。我尝试过简单地将声明添加到类的.h文件中,但没有成功。

有没有任何方法告诉Xcode这些方法实际上已经实现了,只是没有在非类别类文件中实现?

一个简化的例子:

MyClass.h

代码语言:javascript
复制
@interface MyClass : NSObject <NSCoding> {
    int num;              //@ENCODABLE
    float timer;          //@ENCODABLE
    SomeOtherClass *obj;  //@ENCODABLE
}
...
@end

MyClass.m

代码语言:javascript
复制
#import "MyClass.h"
@implementation MyClass
...
@end

Encoders.m

代码语言:javascript
复制
#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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-27 17:07:38

在类的接口、类扩展或接口或扩展指定的协议中声明的任何方法都必须在主@implementation块中实现,否则将收到警告。没有办法在这些地方声明一个方法,并告诉编译器它将属于一个类别。您可以做的是创建一个类别接口并在其中声明NSCoding协议。如果将此接口添加到主头文件中,任何导入标头的文件都会知道类支持编码,但编译器不会抱怨这些方法没有实现。

新MyClass.m

代码语言:javascript
复制
@interface MyClass : NSObject {
    int num;              //@ENCODABLE
    float timer;          //@ENCODABLE
    SomeOtherClass *obj;  //@ENCODABLE
}
...
@end
@interface MyClass (Encoding) <NSCoding>
@end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7215854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档