簡體   English   中英

如何將NSData參數傳遞給swift 3中調用的目標c方法?

[英]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得到相同的字符串嗎? 是? 您對NSDataData疑問是否得到解決?

這沒有任何問題,問題必須是您的Objective-C代碼,或者可能是后端代碼。 從后端檢查他們是否獲得了正確的deviceToken。 檢查一下,您是否使用了正確的開發/分發APNS證書。 調試每個點。 DataNSData沒有任何問題

在Swift 3中,您可以簡單地使用:

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

DataNSData沒有區別。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM