2012-04-26 27 views
1

基於在我的閱讀中,我瞭解到,我需要設置我的AppDelegate引用我的視圖控制器的變量,這樣我可以做這樣的事情。接收條形碼掃描,然後在控制器中調用方法並通過該條形碼掃描。所以我在我的AppDelegate中有這個。如何設置一個變量,我AppDelegate中引用初始化的故事板視圖控制器

- (void)BarcodeDataArrived:(char *)BarcodeData; 
{ 
[myViewController LoadBarcodePage:BarcodeData]; 
} 

我知道,當我的藍牙掃描儀掃描條形碼被調用此方法。問題是myViewController對象沒有引用當前的視圖控制器,結果所有的對象都是空的。

我不認爲我想,因爲故事板已經創建它的一個實例的應用程序加載時創建myViewController的新實例。我只是想能夠引用故事板創建的相同對象。所以,如果我正確理解事情,我需要在我的AppDelegate中設置以下變量:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 
{ 

    // I Want To Set A Reference To My View Controller Here Such As... 

    myViewController = aViewController; 

    // Where aViewController Is What The Storyboard Initialized. 

    return YES; 
} 

我該怎麼做。我在NET上發現的所有參考文獻似乎都涉及筆尖而不是故事板。

這是我的第一個應用程序。請幫助!

回答

0

你不應該實現在應用程序委託。 你爲什麼不嘗試實施你的BarcodeDataArrived在視圖控制器然後

- (void)BarcodeDataArrived:(char *)BarcodeData { 
    [self performSegueWithIdentifier:@"toMyViewControllerSegue" 
          sender:self]; 

    } 

然後在prepareForSegueMethod您可以將數據發送到目標控制器

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
myViewController *destinationController= (myViewController *)segue.destinationViewController; 

    destinationController.BarcodeData=BarcodeData; 

    } 

現在,如果你不想改變的觀點,那麼你必須嘗試新的方法,myViewController應該是一個對象(或類),並在那裏實現方法LoadBarcodePage。你可以在委託對象,它可以在任何類使用

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
[delegate.myVar doWhatever you want]; 
+0

感謝您的回答中引用。問題是條形碼可以在任何視圖中掃描,並且與輸入視角的視圖完全無關。我需要從應用程序的任何視圖中輸入並傳遞它。 AppDelegate看起來就像是全球監聽條形碼到達的理想場所。那是錯的嗎?我下面的示例應用程序,它確實是這樣,但樣本應用程序不使用故事板和故事板的初始化比從我收集碎粒不同,所以我不能複製的代碼行線。 – James 2012-04-27 00:09:22

+0

只是一個更新。使用你給我的最後兩行代碼,我能夠將控制器實例保存到appdelegate,現在一切正常。當我學習時,我可能需要重構這個,但至少一切都在工作!謝謝! – James 2012-04-27 02:08:04

+0

我很高興能幫上忙。 – marcos1490 2012-04-27 14:59:49

相關問題