接收推送通知时,iPhone App崩溃

时间:2017-01-15 06:25:40

标签: ios iphone swift push-notification apple-push-notifications

我有一个应用程序,当我发送推送通知时,它会向我发送设备的位置。但是,当应用程序在前台运行时,应用程序在收到推送通知时崩溃。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler:(UIBackgroundFetchResult) -> Void ) 
{
    NSLog("\(userInfo)")
    if (managedConfig["locationTrackingDisabled"] ?? false) as! Bool == false {
    locationManager.startUpdatingLocation()
    }
    let seconds = 4.0
    let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
    let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

    dispatch_after(dispatchTime, dispatch_get_main_queue(), {
        completionHandler(UIBackgroundFetchResult.NewData)
    })
}

1 个答案:

答案 0 :(得分:1)

这里没有足够的信息来弄清楚出了什么问题,但如果我戴上我的通灵调试帽,那么if语句很容易崩溃,因为强制转换为Bool if:

  1. managedConfig是NSDictionary
  2. 它有一个locationTrackingDisabled键,用于存储Bool以外的其他内容(可能是NSString
  3. 更好的检查方法是使用if let语句来安全地确定字典中的值是否具有预期类型。

    if let trackLocation = managedConfig["locationTrackingDisabled"] as? Bool, trackLocation {
        locationmanager.startUpdatingLocation()
    }
    

    请注意,您可以通过Xcode在设备上运行您的应用,并仍然可以接收推送通知。此外,如果您要通过商店分发应用程序,强烈建议您使用某种方式跟踪崩溃,即通过HockeyApp,Crashlytics,Crittercism等。有很多选项。