2016-11-05 3 views
3

У меня Objective-C МетодКак передать параметр NSData объективному c-методу, вызванному в swift 3?

- (void)updateRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

Я был успешно вызова в быстром 2.3

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

Moxtra.sharedClient().updateRemoteNotificationsWithDeviceTokens(deviceToken) 

} 

, но в быстром изменении 3 метода (от NSData к данным)

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 

    Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: deviceToken) 

}

Но скор 3 устройства знак типа данных возврата -> 32 байт и быстрый лексем 2,3 Устройство типа NSData был обратным - лексема строка - fffeaa1e 5aaaba7d a0e75e33 c139839f 6c906ae5 2b20f834 5a290c3d 20dc447c

так в быстрой 3 I я не могу передать deviceToken на сервер

есть ли способ передать ожидаемый токен устройства типа «данные» в swift 3?

что разница между двумя быстрыми 2.3 и быстрых 3 методов в деталях

Swift 2,3 -

Moxtra.sharedClient().updateRemoteNotificationsWithDeviceTokens(fffeaa1e 5aaaba7d a0e75e33 c139839f 6c906ae5 2b20f834 5a290c3d 20dc447c) 

скор 3

Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: 32) 
+1

Ваш быстрый код 2.3 выглядит неправильно; вы передаете строку, а не NSData. Ваш быстрый код 3 выглядит правильно; Swift 3 'Data' автоматически соединяется с NSData. – Paulw11

+0

@ Paulw11 Правильно! это была моя ошибка ввода, но в коде я передаю NSData .. Я обновляю свой вопрос – sss

+0

Я до сих пор не понимаю вашу проблему. Какую ошибку или другую проблему вы испытываете с версией Swift 3.0? Данные такие же, как NSData – Paulw11

ответ

1

Ваш код скор 3 отлично Правильно, я сделал то же самое, что и вы, и работал нормально. Я думаю, есть и другие проблемы, которые у вас есть.

Если у вас есть сомнения, что она меняется NSData значения, то вы можете попробовать другой эксперимент, как это:

метод добавить следующее в вашем Objective-C код:

-(void)stringWithData:(NSData *)data 
{ 
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"str = %@",str); 
} 

теперь называем этот метод от вашего быстрого 3 кода, как это:

Теперь, здесь вы можете увидеть, что Objective-C имеет NSData параметров и Свифт Data как параметр.

Теперь запустите код, см. Журнал. Вы получаете ту же строку в Log-объекте-c? Да? Ваши сомнения относительно NSData и Data решаются?

Нет проблем с этим, проблема должна быть связана с кодом Objective-C или может быть внутренним кодом. Проверьте с Backend, что они получают надлежащее deviceToken. Убедитесь, что вы использовали надлежащие сертификаты разработки/распространения APNS. Отлаживайте каждую точку.Существует нет каких-либо проблем с Data или NSData

+0

Push-уведомление работает отлично с быстрым 2.3 с тем же APNS, сертификатом и обеспечением ... но не в Swift 3, в Xcode 8 меняю настройку «push-notification» в «возможностях», есть ли какие-либо другие изменения, которые мне нужно сделать в swift 3/Xocde 8 – sss

+0

. Оба нижних параметра отмечены галочкой, как показано на этом изображении: http://www.tiikoni.com/tis/view/?id=dc5bd9c –

+0

Проверьте, что со стороны сервера профиль разработки используется для текущих цель развития –

1

В Swift 3 вы можете просто использовать:

Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: deviceToken as Data) 
1

Там нет никакой разницы в Data и NSData.

let data:Data = .... 
var ndata:NSData = data as! NSData 

Поэтому использовать его в качестве

Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: deviceToken as! Data) 
1

вам нужно типаж к NSData, а затем использовать методы кодирования в соответствии с вы хотите.

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