2012-11-07 81 views
1

我有一個由父類的實例創建的類實例。當創建子類時,會給它一個指向父類的指針,以便我可以從子類啓動父類的實例方法(myMethod)。指向父類 - 防止警告消息

我的父類是一個UIViewController,名爲myViewController。但是,XCode給了我一個警告,說'UIViewController可能不會響應myMethod'。

線(在子類中),導致該錯誤是這樣的:

[self.parent myMethod]; 

儘管它遵循通過和正常工作,我想阻止警告消息。有什麼我可以做的,以確保XCode沒有問題,並且'self.parent'(這是一個UIViewController)迴應'myMethod'?

+0

類不創建類。你有一個由不同類的*實例*創建的類的*實例*。區別很重要。 –

+0

謝謝。問題相應調整。 – CaptainProg

回答

0

你可以強制轉換它:

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

...雖然設計往往是一個味道。

+1

當你可以聲明指針是正確的類型時,不需要這樣做。 –

+0

@HotLicks好點+1,儘管在「parent」並不總是「myViewController」(這是我的假設)的情況下這樣做並不明智。 – justin

+0

如果所有賦值都正確輸入,那麼不應該比「正常」更危險,即「父」是錯誤的類型。不需要施放。 –

0

用正確的類聲明指針,而不僅僅是UIViewController。

爲避免循環聲明,請使用@class MyOwningViewController;。例如,MyContainedViewController.h:

但包括MyContainedViewController.m(除了可能包括MyContainedViewController.h在MyOwningViewController.m)通常MyOwningViewController.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]; 
}