iOS:尝试调用在类别中实现的方法

3

这个问题的前置问题在这里

我有一个类(A),这个类有一个分类。在这个分类中,我定义并实现了一个方法。

现在我正在尝试在另一个类(假设为B)中调用[a someMethod]。我的B类无法调用这个方法。难道不可能从其他类调用分类方法吗?


类别应该作为类的扩展。它们有点类似于子类化。但是,为特定类编写的类别只能由该类对象调用,而不能由其他类调用。例如:如果我为NSString编写一个类别,我只能使用NSString对象调用它。 - SayeedHussain
DBAccess类的类别。在其他类中:DBAccess *access = [[DBAccess alloc]init]; [access myCategoryMeth]; 这不是和NSString一样的情况吗? - NCFUSN
这是有效的,应该可以工作。 - SayeedHussain
请展示一些示例代码。同时解释一下“无法到达”是什么意思。没有语法高亮?编译器警告?运行时错误? - jscs
1
展示你的类别声明和实现。包括.h和.m文件,并在B类中展示你的#include。 - SayeedHussain
3个回答

4

您没有展示您的代码,但在引用类别方法的.m文件中,您需要导入定义类别接口的文件头。


不同的结果。它起作用了。该死,我以为 #import DBAccess 就足够了。现在我必须记住我的方法实现在哪个类别中。这又是一个头疼的问题。 - NCFUSN
Programming: 编程: - SayeedHussain

1
如果您在.m文件中定义了一个类别,那么您将无法从该.m文件之外调用该类别的方法。

啊,我在考虑类扩展。类似于分类,但它在导入时必须有不同的行为。 - Mark

0

很遗憾,您没有提供足够的关于问题的信息。因此,我们只能告诉您应该如何做,并猜测为什么您会遇到麻烦。

当您发布一个问题时,您应该发布所有相关的信息。在这种情况下,那将是不起作用的代码。

此外,您的陈述

我的B类无法访问此方法。

几乎没有意义。您得到了编译器错误、运行时错误、语法窗口没有显示它,您到底是什么意思?

现在,当您在类上实现一个类别时,您想要在头文件(.h)中声明该类别...

@interface Foo (BarExtensions)
- (NSString*)bar;
@end

然后,在实现(.m)文件中为这些方法提供实现。

@implementation Foo (BarExtensions)
- (NSString*)bar {
    return @"FooBar";
}
@end

当然,你应该适当地命名事物。

此外,请确保将.m文件包含在构建目标的文件列表中。

如果你这样做了,就不会有太多问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接