导航控制器和rootViewController

时间:2014-10-15 22:02:10

标签: ios iphone uiviewcontroller ios8

我正在构建一个基本的单视图iBeacon应用程序,其中包含一个显示信标及其属性的表格。当它只是一个视图应用程序时,一切正常。

但是当我在导航控制器中嵌入这个单一视图时,我收到以下错误:

2014-10-15 16:47:09.633 beacon-iphone[14524:4714482] -[UINavigationController setBeacons:]: unrecognized selector sent to instance 0x14d890f0
2014-10-15 16:47:09.634 beacon-iphone[14524:4714482] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setBeacons:]: unrecognized selector sent to instance 0x14d890f0'

我认为这是由于AppDelegate.m中的这些代码行所致,因为原始表格视图在嵌入导航控制器时不再是rootViewController

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    ViewController *viewController = (ViewController*)self.window.rootViewController;
    viewController.beacons = beacons;
    [viewController.tableView reloadData];

    // Do stuff if beacons are found
}

我如何重构这个来计算导航控制器?如果这是一个微不足道的问题,我很抱歉,因为我仍然是iOS菜鸟

下面是我的故事板和工作代码。如上所述,它只会在我将其嵌入导航控制器

时中断

enter image description here

1 个答案:

答案 0 :(得分:0)

根视图控制器现在是导航控制器,因此您需要访问其topViewController属性以获取ViewController,

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
    ViewController *viewController =  (ViewController *)nav.topViewController;
    viewController.beacons = beacons;
    [viewController.tableView reloadData];

    // Do stuff if beacons are found
}