2012-08-27 30 views
3

此问题的前言是hereiOS:尝试呼叫类别中实施的方法

我有一个类(A)和类有类。在我已经定义并实现了一个方法的类中。

现在我正在尝试(让我们假设B)类来调用[someMethod]。我的B班无法达到此方法。不可能从其他类中调用类别方法吗?

+0

类别应该作为类的扩展。它们有点类似于子类。但是为特定类编写的类只能由该类对象调用,而不能由其他类调用。例如:如果我为NSString编写一个类别,我只能使用NSString对象调用它。 – SayeedHussain

+0

DBAccess类的类别。在其他类中:DBAccess * access = [[DBAccess alloc] init]; [访问myCategoryMeth];和NSString不一样吗? – NCFUSN

+0

这是有效的,它应该工作。 – SayeedHussain

回答

4

您没有显示您的代码,但在引用类别方法的.m文件中,您确实需要导入定义类别界面的文件头。

+0

做到了。相同结果 – NCFUSN

+0

结果不一样。有效。该死的,我以为#import DBAccess就够了。现在我必须记住我的方法在哪个类中实现。这是另一个头拱。 – NCFUSN

+0

你必须包括类别 – SayeedHussain

1

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

+0

这是不正确的。 –

+0

啊。我正在考虑扩展一个类。与类别类似,但它的行为必须与导入不同。 – mark

0

不幸的是,您没有提供有关您的问题的足够信息。因此,我们所能做的就是告诉你应该怎么做,并猜测你为什么遇到麻烦。

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

此外,您的发言

我的B级不能达到此方法。

几乎没有任何意义。你得到一个编译器错误,一个运行时错误,语法窗口不显示它,你究竟是什么意思?

现在,当你实现一个类的类别,要声明的类在头文件(.h)...

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

,然后,在执行(.M)文件,为这些方法提供实现。

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

当然,你应该适当地命名的东西。

此外,请确保您将.m文件包含在为您的目标生成的文件列表中。

如果你这样做,没有太多的错误。