這裏是我的代碼中調用子類方法從超:我如何在目標c中使用的類層次時
@interface RootViewController : UIViewController{
}
-(IBAction)btnDetail1_Clicked:(id)sender;
@end
@implementation RootViewController
-(IBAction)btnDetail1_Clicked:(id)sender{
DetailViewController1 *mvcr = [[DetailViewController1 alloc] initWithNibName:@"DetailViewController1" bundle:nil];
[mvcr setDelegate:self];
[self.navigationController pushViewController:mvcr animated:YES];
[mvcr release];
}
@end
@protocol NotifySubclass
@optional
-(void) serviceCall_done;
@end
@interface MasterViewController : UIViewController{
id<NotifySubclass> delegate;
}
@property (retain) id delegate;
-(void) initCallService;
@end
@implementation MasterViewController
@synthesize delegate;
-(void) initCallService{
"My some other code is here."
[self performSelector:@selector(startLoading) withObject:nil afterDelay:5];
}
-(void) startLoading{
"My some other code is here."
[self performSelectorOnMainThread:@selector(loadComplete) withObject:nil waitUntilDone:YES];
}
-(void) loadComplete{
"I want to call DetailViewController1's "serviceCall_done" method from here.
[delegate serviceCall_done];
}
@end
@interface DetailViewController1 : MasterViewController <NotifySubclass>{
}
@end
@implementation DetailViewController1
- (void)viewDidLoad{
[self initCallService];
}
-(void) serviceCall_done{
}
@end
我想從MasterViewController
loadCompete
方法調用DetailViewController1
的serviceCall_done
方法。
我曾嘗試創建協議,但沒有得到確切的地方我必須寫協議,因爲我打電話給DetailViewController1
從RootViewController
。
任何人都可以指導我嗎?
你混淆了你的問題(和代碼)通過談論通知「子類」和「超」。這個問題與類繼承無關。您只需在主控制器中引用您的詳細控制器。有沒有一些對象知道這些,也許你的根視圖控制器? – jrturton 2013-03-22 07:23:46
@jrturton我有多個detailviewcontroller像DetailViewController1,DetailViewController2,DetailViewController3等,他們都是MasterViewController的子類。哪個detailviewcontroller通知我將管理,但如何通知我問。你能否詳細說明一下。 – 2013-03-22 07:35:48
我希望Apple對單詞'retain'和'delegate'作爲單個表達式的一部分發出警告。 – 2013-03-22 09:20:20