2014-10-07 3 views
6

Я пытаюсь следовать Руководству Синтаксического для обработки уведомлений я отправить в формате JSON, но я имею проблему, вот мой код:Xcode, Анализировать - Обработка удаленных уведомлений

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 
     // Override point for customization after application launch. 
     Parse.setApplicationId("MyAppId", clientKey: "MyAppClientKey") 

     var notificationType: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound 

     var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: notificationType, categories: nil) 
     UIApplication.sharedApplication().registerUserNotificationSettings(settings) 
     UIApplication.sharedApplication().registerForRemoteNotifications() 

if let launchOptions = launchOptions { 
    var notificationPayload: NSDictionary = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary! 
    println(launchOptions) 

    var url = notificationPayload["url"] as String 

    var feed: FeedTableViewController = FeedTableViewController() 
    feed.messages.insert(url, atIndex: 0) 
    feed.sections.insert("section", atIndex: 0) 
    } 


     return true 
    } 

приложение не разбивается, но изменения, которые я сделал, не состоялись. Json код:

{ 
    "aps": { 
     "badge": 10, 
     "alert": "Test", 
     "sound": "cat.caf" 
    }, 
    "url": "http://www.google.com" 
} 

ответ

8

Я предполагаю проблему здесь:

launchOptions(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 

Я не уверен, что вы ожидали, но, насколько я знаю, нет никакого способа, как, что по словарю. Возможно, вы ищете синтаксис подстроки. Что-то вроде этого:

launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary 

Чтобы получить словарь вложенной в словаре launchOptions под ключ: UIApplicationLaunchOptionsRemoteNotificationKey.

Это означает, что запускOptions может быть равен нулю, вы должны добавить эту проверку в свой код, а также попытаться выполнить регистрацию launchOptions и опубликовать результаты здесь.

Вы можете проверить, если launchOptions равны нулю, как это:

if let launchOpts = launchOptions { 
    var notificationPayload: NSDictionary = launchOpts.objectForKey(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 
} 
+0

Пожалуйста, проверьте мой обновленный пост, и что делать, если launchoptions == ноль? – Abdou023

+0

обновление для как проверить ноль, я не уверен, что вы должны делать, если они ноль. Я предполагаю, что они ноль, приложение не было открыто через уведомление, и вы должны просто продолжить. – Logan

+0

Это сработало, но теперь я не могу заставить уведомление повлиять на мое приложение. пожалуйста, проверьте мои изменения. – Abdou023

3

NSDictionary-х objectForKey возвращает необязательный:

func objectForKey(_ aKey: AnyObject) -> AnyObject?

так что если вы вынуждаете разворачивать его помощью! вы рискуете, если опция содержит ноль. Вы должны принудительно разворачивать только тогда, когда вы на 100% уверены, что значение «Дополнительно» содержит значение, но в этом случае параметр UIApplicationLaunchOptionsRemoteNotificationKey устанавливается только тогда, когда приложение запускается, когда пользователь удаляет сообщение удаленного уведомления в центре уведомлений.

Вы должны проверить Факультативный и подавленным в NSDictionary, используя в качестве ?:


if let myDict = launchOptions[UIApplicationLaunchOptionsRemoteNotifcationKey] as? NSDictionary { 
// there is a notification 
} else { 
// no notification 
} 

(«как NSDictionary?» Не является строго обязательным, как вы можете позже обратное приведение, если вы не подавленным Swift предупредит вас, что объект myDict будет определен в качестве AnyObject.

+0

сделали это, все равно получите ту же ошибку. – Abdou023

2
if let remoteNotification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 

} 
Смежные вопросы