2014-10-22 2 views
8

Я пытаюсь получить Разбираем уведомления толчка, работающих на мое приложение (все стремительной), но при попытке реализовать, я получаю ошибку 'PFInstallation' does not have a member named 'saveInBackground'Анализировать Push Notifications - Swift установка не работает

Вот мой код.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    Parse.setApplicationId("APP ID HIDDEN", clientKey: "CLIENT ID HIDDEN") 

    // let notificationTypes:UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound 
    //let notificationSettings:UIUserNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) 
    var notificationType: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound 

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

    //UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings) 
    // Override point for customization after application launch. 
    return true 
} 

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings!) { 
    UIApplication.sharedApplication().registerForRemoteNotifications() 

} 

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

    var currentInstallation: PFInstallation = PFInstallation() 
    currentInstallation.setDeviceTokenFromData(deviceToken) 
    currentInstallation.saveInBackground() 

    println("got device id! \(deviceToken)") 

} 


func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
    println(error.localizedDescription) 
    println("could not register: \(error)") 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    PFPush.handlePush(userInfo) 
} 

Когда я изменить currentInstallation.saveInBackground к currentInstallation.saveEvenutally(), код компилируется нормально ..

Но при попытке успешно подписаться на уведомления толчка, ошибка всплывает в консоли говоря Error: deviceType must be specified in this operation (Code: 135, Version: 1.4.2)

I потратили часы, пытаясь понять это, не играли в кости, любая помощь ценится.

ответ

22

Для кого-то, кто имеет эту ошибку, убедитесь, что вы импортировать рамки болты в ваш Bridging заголовок файла

Это не указано в их документах.

Это исправляет проблему.

Ниже приведен код.

Просто добавьте это к своему мостовому заголовку, тогда вы хорошо пойдете. Благодаря

+0

Это все еще не исправляет это для меня :(, делая это + var currentInstallation: PFInstallation = PFInstallation.currentInstallation() работал – yoshyosh

+1

'import Bolts' Вот и все –

7

Действительная установка PF может быть создана только через [PFInstallation currentInstallation], потому что требуемые поля идентификатора считываются только. (source)

Таким образом, вместо:

var currentInstallation: PFInstallation = PFInstallation() 

Try:

var currentInstallation = PFInstallation.currentInstallation() 
+0

Хорошо, это мало чем помогло. У все еще есть ошибка. «PFInstallation» не имеет члена с именем «saveInBackground». –

+0

Он получает идентификатор устройства точно, просто не будет регистрироваться на стороне Parse в качестве установки. Он не получит push –

+0

. Ну, вы не получите push, пока не получите метод сохранения. По какой-то причине опция 'currentInstallation' может быть необязательной? Опционально щелкните по нему и посмотрите, является ли это типом 'PFInstallation?' – Andrew

4

Просто напишите import Bolts в вас AppDelegate.swift файл

+3

Это должен быть принятый ответ. Текущий принятый ответ не работает. – JYeh

2

Кроме импорта болтов, я установил ту же ошибку в моем приложении, изменив функцию

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    // Store the deviceToken in the current Installation and save it to Parse 
    let installation = PFInstallation.currentInstallation() 
    installation.setDeviceTokenFromData(deviceToken) 
    installation.saveInBackground() 
} 

С направляющей Разбор по Пуш Уведомления (в отличие от руководства по быстрому запуску): https://parse.com/docs/ios/guide#push-notifications

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