当前位置: 首页 > 知识库问答 >
问题:

多个ios推送通知导致应用程序崩溃。由于信号6(SIGABRT)而终止

江佐
2023-03-14

当我从收到的通知启动我的应用程序,应用程序午餐成功并进入受人尊敬的窗口,现在再次当我收到通知,而应用程序是打开然后应用程序崩溃,意味着每当我的应用程序不在后台或前台运行,我启动我的应用程序使用通知...然后再次当我收到通知应用程序崩溃

我的代码在下面,请帮忙

导入UIKit

@UIApplicationMain类AppDelegate:UIResponder、UIApplicationLegate{

var window: UIWindow?


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let barAppearace = UIBarButtonItem.appearance()
    barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)  //CODE TO REMOVETITLE OFACK BUTTON ITEM IN NAVIGATIION CONTROLLER


    let notificationTypes : UIUserNotificationType = [.Alert, .Badge, .Sound]
    let notificationSettings : UIUserNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil)
    UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)




    if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {


         NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(AgentAllTab.readyNotificationAction), name: "AgentReadyNotification", object: nil)
        let userInfo = launchOptions![UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject]

        let aps = userInfo!["aps"] as! [String: AnyObject]
        print("Remote noti data from didFinishLaunchingWithOptions \(aps)")

        let data = aps["data"]  as! [String: AnyObject]
        let type = aps["type"] as! Int
        print("notification TYPE  \(type)")

开关类型{案例0:

            NSUserDefaults.standardUserDefaults().setObject(aps, forKey: "notificationlauch")

        break
       default:
       break


}

返回真实

}

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings)
    {
         if notificationSettings.types != .None {
            application.registerForRemoteNotifications()
        }

    }
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

        let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
        var tokenString = ""

        for i in 0..<deviceToken.length {
            tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
        }

       NSUserDefaults.standardUserDefaults().setObject(tokenString, forKey: "DeviceToken")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
        print(error.localizedDescription)
    }

Func应用程序(应用程序: UIApplication, didReceive远程通知userInfo:[NSObject: AnyObject]){

    let aps = userInfo["aps"] as! [String: AnyObject]

    let data = aps["data"]  as! [String: AnyObject]
    let type = aps["type"] as! Int

      //Do something when app is active
    if UIApplication.sharedApplication().applicationState == UIApplicationState.Active {

        switch type {
        case 0:
            let custName = data["customerName"] as! String
            let notification = CWStatusBarNotification()
            notification.notificationStyle = .NavigationBarNotification
            notification.notificationAnimationInStyle = .Top
            notification.notificationLabelBackgroundColor =  UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)
            notification.notificationLabelTextColor = UIColor.whiteColor()
            notification.notificationLabelFont = UIFont.boldSystemFontOfSize(15)
            notification.displayNotificationWithMessage("\(custName) shorlisted you", forDuration: 3.0)

            notification.notificationTappedClosure = {

                NSNotificationCenter.defaultCenter().postNotificationName("AgentReadyNotification", object: self)

                notification.dismissNotification()
            }

            break

        default:
            break
        }

    } else  {

                   // Do something else when your app is in the background


        switch type {
        case 0 :

             NSNotificationCenter.defaultCenter().postNotificationName("AgentReadyNotification", object: self)



            break

        default:


            break

        }
    }

}

func应用程序WillResignActive(应用程序:UIApplication){

    print(" applicationWillResignActive")
}

func applicationDidEnterBackground(application: UIApplication) {

    print(" applicationDidEnterBackgroundndddddddddddddd")
}

func applicationWillEnterForeground(application: UIApplication) {

     print(" applicationWillEnterForeground")

  }

func applicationDidBecomeActive(application: UIApplication) {

    print(" applicationDidBecomeActive")

}

func applicationWillTerminate(application: UIApplication) {

    print(" applicationWillTerminate")
       }

}

//此代码来自appdelegate.swift//现在代码来自处理推送的视图控制器

import UIKit


class AgentAllTab: UITableViewController ,UIPopoverPresentationControllerDelegate ,AgentFilterDelegate {


     var allQuoteId = String()


    var filterTitle = "Market"



    var quotes: [[String: AnyObject]] = [[:]]       //VALUE FOR RESPONSE DICT
    var newQuoteDict: Dictionary<String, String> = [String: String]()   // DECLARING DICTIONARY FOR POST PARAMETERS

      override func viewDidLoad() {
        super.viewDidLoad()

        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(AgentAllTab.readyNotificationAction), name: "AgentReadyNotification", object: nil)

if ( NSUserDefaults.standardUserDefaults().objectForKey("notificationlauch") != nil){

           NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(AgentAllTab.readyNotificationAction), name: "NotificationLaunchReady", object: nil)
            NSNotificationCenter.defaultCenter().postNotificationName("NotificationLaunchReady", object: self)

 NSUserDefaults.standardUserDefaults().removeObjectForKey("notificationlauch")
            NSUserDefaults.standardUserDefaults().synchronize()
            return
        }

executeFetch("/Market_all/")

 }




   override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return quotes.count
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if filterTitle == "Ready"{
        cell = tableView.dequeueReusableCellWithIdentifier("AgentAllTabReadyCell", forIndexPath: indexPath) as! AgentAllTabCellSubClass

            if(quotes[indexPath.row].count == 0){
           //normal code to hide all content of cell
         }
    }else{
       //code in  case we get data
   }else{
       //Code for other filter title same as above

    }
    return cell
}

FONC执行获取(apiurl: String){

  //function to fetch data from server and feed into uitableviewcontroller

}

//函数处理消息推送func readyNotificationAction(通知:NSNotify){

    filterTitle = "Ready"
    self.tabBarController?.tabBar.hidden = true
    executeFetch("/agentReady/")

}

}

共有1个答案

魏波娃
2023-03-14

只需删除一行代码就可以完美地工作,我在didFinishLaunchingWithOptions方法中添加了观察者。我更正的代码如下:,

Func应用程序(应用程序:UIApplication,didFinishLaunchingBackOptions启动选项:[NSObject: AnyObject]?)-

let barAppearace = UIBarButtonItem.appearance()
barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)  //CODE TO REMOVETITLE OFACK BUTTON ITEM IN NAVIGATIION CONTROLLER


let notificationTypes : UIUserNotificationType = [.Alert, .Badge, .Sound]
let notificationSettings : UIUserNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)




if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {

//从这里删除了这个观察者,并将其放置在所需的视图控制器i.e.the位置

     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(AgentAllTab.readyNotificationAction), name: "AgentReadyNotification", object: nil)

//还可以在放置此观察者的位置添加Denit,并从viewcontroller中删除该观察者,以便在应用程序终止时从通知中心删除该观察者

让userInfo=launchOptions![UIApplicationLaunchActionsRemoteNotificationKey]作为?[字符串:AnyObject]

    let aps = userInfo!["aps"] as! [String: AnyObject]
    print("Remote noti data from didFinishLaunchingWithOptions \(aps)")

    let data = aps["data"]  as! [String: AnyObject]
    let type = aps["type"] as! Int
    print("notification TYPE  \(type)")

开关类型{案例0:

        NSUserDefaults.standardUserDefaults().setObject(aps, forKey: "notificationlauch")

    break
   default:
   break

}

返回真实

}

//其余的事情都没变,谢谢你,大卫五世

 类似资料:
  • 我开发了一个React Native应用程序,当应用程序处于活动状态时,每次收到来自OneSignal的消息推送时都会崩溃。 错误是。 如果我在应用程序处于后台时收到通知,则没有问题。 这是我的身材。gradle文件: 还有我的应用/构建。gradle文件: 你知道问题来自哪里吗?

  • 如果我的应用在后台运行(服务),我偶然发现了一个接收GCM消息的问题。在我的场景中,我没有收到GCM消息(请注意,这不是关于如何接收GCM,就像这里一样),并且ActiveManager会杀死应用程序。所以我想知道我是否有概念上的误解,或者这是一个普遍的问题。 出身背景 我有一个在前台(活动)和后台(服务)运行的Android应用程序。应用程序将附加到持久性通知,以确保即使用户打开 Android

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩

  • 当我尝试更新应用程序时,应用程序崩溃了。在我们的应用程序中,我们正在缓存中保存更新的版本,然后尝试从缓存中安装应用程序。应用程序由于android.os.fileuriexposedexception而崩溃。我发现通过intent.getData()在应用程序之外公开了日志android.os.fileuriexposedexception:file:///storage/emulated/0/t

  • 这里是Android开发者新手。我在MainActivity中使用recyclerview,应用程序不断崩溃。 任何帮助都将受到赞赏! 编辑:对不起,我是新来的。我已经附加了Logcat。和其他xml文件。谢谢 这是我的代码: 列出你的布局。xml: activity_main.xml: } ProductAdapter。java类: } Logcat: 致命异常:主进程:e.wolverine2

  • 我用Unity3D制作了一个游戏/应用程序,需要设置一个推送通知的OneSignal。它在Android上工作得很好,我已经测试并发布了它。现在,用iOs真实设备测试给了我一个例外,并使我的应用程序崩溃。 我遵循了他们在这里找到的实现步骤:https://documentation.onesignal.com/docs/unity-sdk-setup 我试过在iPhone7 Plus、iPad和模