2013-03-22 23 views
1

這裏是我的代碼中調用子類方法從超:我如何在目標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 

我想從MasterViewControllerloadCompete方法調用DetailViewController1serviceCall_done方法。

我曾嘗試創建協議,但沒有得到確切的地方我必須寫協議,因爲我打電話給DetailViewController1RootViewController

任何人都可以指導我嗎?

+0

你混淆了你的問題(和代碼)通過談論通知「子類」和「超」。這個問題與類繼承無關。您只需在主控制器中引用您的詳細控制器。有沒有一些對象知道這些,也許你的根視圖控制器? – jrturton 2013-03-22 07:23:46

+0

@jrturton我有多個detailviewcontroller像DetailViewController1,DetailViewController2,DetailViewController3等,他們都是MasterViewController的子類。哪個detailviewcontroller通知我將管理,但如何通知我問。你能否詳細說明一下。 – 2013-03-22 07:35:48

+0

我希望Apple對單詞'retain'和'delegate'作爲單個表達式的一部分發出警告。 – 2013-03-22 09:20:20

回答

0

您可以使用NSNotificationCenter進行此發佈通知,並在所有3個詳細信息類中添加觀察者。閱讀一些關於NSNotificationCenter的教程。

這裏有一些教程

Tutorail 1

Tutorial 2

Tutorial 3

+0

謝謝Rahul Vyas回答。它幫助到我。 – 2013-03-23 04:50:51

2

添加方法MasterViewController

-(void) serviceCall_done{ 
    //in this method you do nothing. 
} 

修改

-(void) loadComplete{ 
    [self serviceCall_done]; 
} 

,然後在DetailViewController1覆蓋此方法serviceCall_done

-(void) serviceCall_done{ 
    //Add code 
}