2013-07-30 64 views
0

OK,真正快速的問題,如果我想傳遞一個方法的視圖控制器,這是正確的方式(顯然,似乎都工作) -的UIViewController傳遞方法

-(void)fetchedDataN:(UIViewController *)response 

-(void)fetchedDataN:(ViewController *)response 

編輯:這裏是爲了澄清事情

- (IBAction)nextButton:(id)sender { 


activityN.hidden=NO; 
[activityN startAnimating]; 
[self.view bringSubviewToFront:activityN]; 

[audioFile stop]; 
NSLog(@"HELL O"); 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    Page04ViewController *viewControl=[[Page04ViewController alloc]initWithNibName:nil bundle:nil]; 

    [self performSelectorOnMainThread:@selector(fetchedDataN:) 
          withObject:viewControl waitUntilDone:YES]; 
}); } 



-(void)fetchedDataN:(UIViewController *)response{ 


if ([self interfaceOrientation] == UIDeviceOrientationLandscapeLeft) { 

    [self presentViewController:response withPushDirection:@"fromTop"]; 

    //  NSLog(@"landscape left"); 
} 

else if([self interfaceOrientation] == UIDeviceOrientationLandscapeRight) 
{ 
    [self presentViewController:response withPushDirection:@"fromBottom"]; 

    // NSLog(@"landscape right"); 
} } 

回答

2

想必ViewControllerUIViewController一個子類...

如果您嘗試將UIViewController傳遞給第二個方法,這是行不通的(編譯器會抱怨),因爲它不能保證實例你傳遞的是正確的課程。

如果你試圖通過ViewController來,將工作,因爲編譯器可以保證第一種方法。

方法定義的正確性取決於你的意圖 - 不知道的是,無論無一不是正確的,它們只是不同...


爲您更新的問題,如果該方法僅呈現視圖控制器然後使用UIViewController可以被認爲是正確的,因爲它是最通用和靈活的選項。如果您想在將來更改方法以添加其他需要response作爲特定子類的功能,那麼編譯器會告訴您它不能保證該類是正確的類型。

0

這是正確的完整代碼: -(void)fetchedDataN:(UIViewController *)response

然後你可以

-(void)fetchedDataN:(UIViewController *)response 
{ 
    if ([controller isKindOfClass:[ViewControllerSubclass class]]) 
    { 
     //The controller is a ViewControllerSubclass or a subclass of ViewControllerSubclass your code here 
    } 
    if ([controller isKindOfClass:[MyViewControllerSubclass class]]) 
    { 
     //The controller is a MyViewControllerSubclass or a subclass of MyViewControllerSubclass your code here 
    } 
} 
+2

'correct'的概念總是基於上下文 - 在什麼情況下是「正確」? – Wain

0

這取決於如果你想通過只ViewController和/或它的後代或UIViewController和它的所有後代。 UIViewController將是更通用的方式(我認爲)ViewControllerUIViewController子類,也許你會不會延長ViewController了。一切都取決於上下文,如果您需要使用ViewController中定義的任何特定方法/屬性,或者您只想接收任何視圖控制器子類UIViewController

0

如果你想傳遞一個UIViewController;使用第一種方法。 我從來沒有聽說過類型'ViewController'。它是你自己的類型?如果您始終要確保傳入的變量是「ViewController」類型,請使用第二種方法。

相關問題