2012-04-26 26 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

相关问题