仅在首次启动时,位置管理器才会展开错误

时间:2019-05-09 17:51:13

标签: swift core-location

每次我在新设备上安装我的App时,都会得到一个意外发现的nil,而在第一次启动时就隐式解开了Optional值!

但是随后的发射很好,并且不会崩溃。

这是崩溃的行

let Startlat = String(LocationManager.sharedInstance.location.coordinate.latitude)

我不确定是什么原因导致的,因为它只会在首次启动时发生!

2 个答案:

答案 0 :(得分:0)

首次启动涉及异步用户权限,因此location在通过!访问时将为空

var location: CLLocation! /// <<<<< ! should be ?

,您需要做

if let loc = LocationManager.sharedInstance.location as? CLLocation {
}

答案 1 :(得分:0)

仅当您访问类的属性或调用该类的方法时,才会初始化单例类实例。最初,location属性将为nil。 因此,创建一个像这样的启动方法并在AppDelegate中调用该方法

也不要在LocationManager类中将location属性声明为显式展开的可选

AppDelegate.swift

li_switch = torch.tensor([True, False, False, True, True])
torch.add(a, li[li_switch]).sum(dim=0)
torch.sub(b, li[~li_switch]).sum(dim=0)

LocationManager.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        LocationManager.shared.start()
        print(LocationManager.shared.location?.coordinate.latitude)//will never crash
        return true
    }