我有一个由父类实例创建的类实例。创建子类时,会给它一个指向父类的指针,这样我就可以从子类中启动父类的实例方法( myMethod )。
我的父类是一个名为 myViewController 的UIViewController。但是,XCode给了我一个警告,说'UIViewController可能无法响应myMethod'。
导致错误的行(在子类中)如下所示:
[self.parent myMethod];
虽然这样做并且工作正常,但我想阻止警告消息。我能做些什么来让XCode放心没有问题,并且'self.parent'(这是一个UIViewController)会回应'myMethod'吗?
答案 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];
}