2016-09-16 49 views
0

我有一个单一的文件中的两个实现。如下所示。我如何在第一个访问第二个方法?如果我试图这样做,编译器会抛出一个未知的选择器错误。两个@implementation的文件;底层实现方法在顶层实现中不可见?

我知道,在C,你必须有它必须在定义层次结构能够构建方法。这在ObjectiveC中也一样吗?除了在第一个实现之上定义第二个实现之外,还有其他的选择吗?

@implementation BaseClass 

    -(void)someMethod { 
    XCUIElementQuery *elementQuery = [[XCUIApplication alloc] init].tables 
    [elementQuery anotherMethod]; //How do I use the category method here? 
    } 
@end 


@implementation XCUIElementQuery (BaseClassCategory) 

    -(void)anotherMethod { 
    //do something 
    } 
@end 

回答

1

在文件的顶部,只需要声明一个接口,用于XCUIElementQuery像这样:

@interface XCUIElementQuery (XCUIElementQuery_private) 
-(void)anotherMethod; 
@end 
+1

这必须是'@interface XCUIElementQuery(BaseClassCategory)' – rmaddy

+0

不,它不需要http://stackoverflow.com/questions/11679885/xcode-now-generates-an-empty-category-why – TyR

+0

你的答案将声明添加到类扩展中。我的建议将声明添加到班级类别中。这是两回事。 OP在询问班级类别。因此,声明应被加入到类的类别,而不是唯一类扩展。 – rmaddy

0

只是交换了两套实现。

@implementation XCUIElementQuery (BaseClassCategory) 

-(void)anotherMethod { 
    //do something 
} 
@end 

@implementation BaseClass 

-(void)someMethod { 
    XCUIElementQuery *elementQuery = [[XCUIApplication alloc] init].tables 
    [elementQuery anotherMethod]; //How do I use the category method here? 
} 

@end