![](/img/trans.png)
[英]How do I access my viewController from my appDelegate? (Swift)
[英]How Do I Set A Variable In My AppDelegate That References The Initialized Storyboard ViewController
根據我的閱讀情況,我了解到我需要在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上找到的所有參考書似乎都包含筆尖,而不是情節提要。
這是我的第一個應用程序。 請幫助!
您不應該在應用程序委托中實現該功能。 為什么不嘗試在ViewController中實現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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.