在AppDelegate中,我有下一个扩展:

extension AppDelegate: CLLocationManagerDelegate {
    func locationManager(manager: CLLocationManager!,didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {
        let viewController:ViewController = window!.rootViewController as! ViewController
        viewController.beacons = beacons as! [CLBeacon]?

        NSLog("didRangeBeacons");
    }
}


在ViewController中,我这样做:

class ViewController: UIViewController {
    var beacons: [CLBeacon]?

    override func viewDidLoad() {
        super.viewDidLoad()

        if(beacons != nil){
            println(beacons![0])
        }
    }
}


而且它什么也没印出来。但是它不是空的,是一个数组。它在日志didRangeBeacons中打印。那么,问题出在哪里,我该如何解决呢?

最佳答案

CLLocationManagerDelegate的方法locationManager(manager:,didRangeBeacons beacons:, inRegion:)是异步调用。在这里,您尝试通过beacons方法在ViewController中获取viewDidLoad的值。

AppDelegate上的方法可能在视图控制器的viewDidLoad之后触发。

检查viewDidLoad之前是否未调用locationManager(manager:,didRangeBeacons beacons:, inRegion:)

关于ios - 无法在ViewController的AppDelegate中使用数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30861152/

10-12 02:31