Objective c 如何在AppDelegate中设置引用初始化的情节提要ViewController的变量
根据我的阅读,我了解到我需要在AppDelegate中设置一个引用我的视图控制器的变量,以便我可以这样做。接收条形码扫描,然后调用控制器中的方法并传入该条形码扫描。所以我在AppDelegate中有这个Objective c 如何在AppDelegate中设置引用初始化的情节提要ViewController的变量,objective-c,ios,storyboard,Objective C,Ios,Storyboard,根据我的阅读,我了解到我需要在AppDelegate中设置一个引用我的视图控制器的变量,以便我可以这样做。接收条形码扫描,然后调用控制器中的方法并传入该条形码扫描。所以我在AppDelegate中有这个 - (void)BarcodeDataArrived:(char *)BarcodeData; { [myViewController LoadBarcodePage:BarcodeData]; } 我知道,当我的蓝牙扫描仪扫描条形码时,会调用此方法。问题是myViewController对象
- (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;
}
我该怎么做呢。我在网上找到的所有参考资料似乎都涉及NIB而不是故事板
这是我的第一个应用程序。救命啊 您不应该在应用程序代理中实现这一点。 为什么不尝试在ViewController中实现您的条形码数据呢
- (void)BarcodeDataArrived:(char *)BarcodeData {
[self performSegueWithIdentifier:@"toMyViewControllerSegue"
sender:self];
}
然后在PrepareForSegue方法中,您可以将数据发送到目标控制器
-(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];
谢谢你的回答。问题是条形码可以在任何视图中扫描,并且从输入角度来看与视图完全无关。我需要从应用程序中的任何视图获取输入并将其传递出去。AppDelegate似乎是全球监听条形码到达的最佳场所。这不对吗?我正在遵循一个这样做的示例应用程序,但示例应用程序不使用故事板,并且故事板的初始化与我收集的NIB不同,因此我无法逐行复制代码。只是更新。使用您给我的最后两行代码,我能够将控制器实例保存到appdelegate,现在一切正常。据我所知,我可能最终需要重构它,但至少一切都正常!谢谢