1

根据我的阅读,我了解到我需要在我的 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 上找到的所有参考资料似乎都涉及笔尖而不是情节提要。

这是我的第一个应用程序。请帮忙!

4

1 回答 1

0

你不应该在你的 App Delegate 中实现它。你为什么不尝试在 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];
于 2012-04-26T23:10:43.773 回答