如何从AppDelegate中的ViewController调用函数?

时间:2016-03-17 05:07:38

标签: ios iphone xcode swift

我正在制作一款使用iBeacon的应用。当检测到iBeacon时(在AppDelegate内),应用程序会检测到手机的坐标并将其转发给API。

我在ViewController中设置了一个名为runGPS()的函数,它执行上述操作并尝试在检测到iBeacon时执行它。

当我执行ViewController()。runGPS()时,我收到一条错误:'编码器'在电话中

我已经查找了这个问题,并继续围绕解决问题。一次校正会导致另一个错误等等。

如何纠正这一点,或者是我对此错误的整体策略?

func locationManager(manager: CLLocationManager,
    didEnterRegion region: CLRegion) {
        manager.startRangingBeaconsInRegion(region as! CLBeaconRegion)
        manager.startUpdatingLocation()

        NSLog("You entered the region")

        ViewController(NSCoder)!.runGPS()

}

2 个答案:

答案 0 :(得分:2)

我还在我的应用程序中实现了iBeacon。您必须在该viewcontroller中添加此位置管理器委托,并将委托设置为

locationManager.delegate = self
locationManager.requestAlwaysAuthorization()

你可以检查viewController,如果有任何用户进入你的beacon区域,那么这个委托方法将会运行

 func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {

    }

您可以在参数中收到的 beacons 数组中检查您的信标。

答案 1 :(得分:1)

如果runGPS()类的代码不在那里,你应该将其分开。它是否使用ViewController的任何功能?如果没有,那么你应该将它移动到一个单独的类,用于将数据传递给API。如果你不能这样做那么你可以将runGPS声明为一个静态方法并调用ViewController,前提是你没有使用ViewController.runGPS()方法中ViewController的任何属性