2014-10-15 3 views
0

Я создаю базовое приложение iBeacon с одним представлением с таблицей, отображающей маяки и их свойства. Когда это всего лишь приложение с одним представлением, все работает правильно.Контроллеры навигации и rootViewController

Но когда я встраивать этот единственный вид в навигационном контроллере, я не получаю ошибку ниже:

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

ответ

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 
} 
+0

Это генерирует предупреждение: 'Несовместимые типы указателей, инициализирующие 'ViewController *' с выражением типа 'UIViewController *'' в строке 'ViewController * viewController = nav.topViewController' – Anconia

+0

@Anconia, извините, это потому, что я остановился литой в этой строке. Я обновил свой ответ – rdelmar

+0

Забавный, я просто набрал его и готов был ответить - спасибо за быстрый ответ! Будет ли тип каста зрения иметь какие-либо выговоры? – Anconia

Смежные вопросы