指向父类的指针 - 阻止警告消息

时间:2012-11-07 00:45:53

标签: objective-c pointers methods

我有一个由父类实例创建的类实例。创建子类时,会给它一个指向父类的指针,这样我就可以从子类中启动父类的实例方法( myMethod )。

我的父类是一个名为 myViewController 的UIViewController。但是,XCode给了我一个警告,说'UIViewController可能无法响应myMethod'。

导致错误的行(在子类中)如下所示:

[self.parent myMethod];

虽然这样做并且工作正常,但我想阻止警告消息。我能做些什么来让XCode放心没有问题,并且'self.parent'(这是一个UIViewController)回应'myMethod'吗?

2 个答案:

答案 0 :(得分:0)

你可以对它进行类型转换:

myViewController * p = (myViewController*)self.parent;
assert([p isKindOfClass:[myViewController class]]);
[p myMethod];

......虽然设计往往是一种气味。

答案 1 :(得分:0)

用正确的类声明指针,而不仅仅是UIViewController。

要避免循环声明,请使用@class MyOwningViewController;。例如,MyContainedViewController.h:

@class MyOwningViewController;
@interface MyContainedViewController {
    MyOwningViewController* owningViewController;
}
@property (weak, nonatomic) MyOwningViewController* owningViewController;
@end;

但是在MyContainedViewController.m中包含通常的MyOwningViewController.h(除了可能在MyOwningViewController.m中包含MyContainedViewController.h)。

MyOwningViewController.h:

#import "MyContainedViewConroller.h"  // Though you could use @class here as well
@interface MyOwningViewController {
    MyContainedViewController* containedViewController;  
}
@property (strong, nonatomic)  MyContainedViewController* containedViewController;
-(void) myMethod;
@end;

最后,在MyContainedViewController.m中:

#import "MyOwningViewController.h"

...

-(void) doSomething {
   [owningViewController myMethod];
}