[英]How to pass NSData parameter to objective c method called in swift 3?
我有Objective-C方法
- (void)updateRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
我在swift 2.3中成功調用了
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
Moxtra.sharedClient().updateRemoteNotificationsWithDeviceTokens(deviceToken)
}
但在swift 3方法更改(從NSdata到數據)
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: deviceToken)
}
但是數據類型的 swift 3設備令牌返回 - > 32字節和NSdata類型的 swift 2.3設備令牌返回 - 令牌字符串 - fffeaa1e 5aaaba7d a0e75e33 c139839f 6c906ae5 2b20f834 5a290c3d 20dc447c
所以在swift 3中我無法將deviceToken傳遞給服務器
有沒有辦法在swift 3中傳遞參數類型“Data”的預期設備令牌?
什么是swift 2.3和swift 3方法之間的差異細節
Swift 2.3 -
Moxtra.sharedClient().updateRemoteNotificationsWithDeviceTokens(fffeaa1e 5aaaba7d a0e75e33 c139839f 6c906ae5 2b20f834 5a290c3d 20dc447c)
迅捷3
Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: 32)
你的swift 3代碼是完全正確的,我做了與你完全相同的事情,並且工作正常。 我認為你還有其他一些問題。
如果您仍然懷疑它是否正在更改NSData
值,那么您可以嘗試其他類似的實驗:
在您的objective-c代碼中添加以下方法:
-(void)stringWithData:(NSData *)data
{
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"str = %@",str);
}
現在從你的swift 3代碼中調用這個方法,如下所示:
let str = "Hello StackOverflow!";
let data:Data! = str.data(using: String.Encoding.utf8);
Moxtra.sharedClient().string(with: data);
現在,在這里你可以看到Objective-c有NSData
參數,而swift有Data
作為參數。
現在運行代碼,看日志,你在登錄objective-c得到相同的字符串嗎? 是? 您對NSData
和Data
疑問是否得到解決?
這沒有任何問題,問題必須是您的Objective-C代碼,或者可能是后端代碼。 從后端檢查他們是否獲得了正確的deviceToken。 檢查一下,您是否使用了正確的開發/分發APNS證書。 調試每個點。 Data
或NSData
沒有任何問題
在Swift 3中,您可以簡單地使用:
Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: deviceToken as Data)
Data
和NSData
沒有區別。
let data:Data = ....
var ndata:NSData = data as! NSData
所以用它作為
Moxtra.sharedClient().updateRemoteNotifications(withDeviceToken: deviceToken as! Data)
您需要對NSData進行類型轉換,然后根據需要使用編碼方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.