簡體   English   中英

“ iPhone應用程序中的UIApplicationDelegate從未在-[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]中調用reply()”

[英]“The UIApplicationDelegate in the iPhone App never called reply() in -[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]”

好的,所以我要制作這個Apple Watch應用程序,在我的Watch App中,我有一個按鈕。 當您觸摸按鈕時,它將執行以下操作:

[WKInterfaceController openParentApplication:[NSDictionary dictionary] reply:^(NSDictionary *replyInfo, NSError *error) {
    if(error) {
        NSLog(@"%@",error);
    }
}];

在我的應用程序委托文件中,我這樣做:

-(void) application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
    //Code that is not importent and is confidential
    reply([NSDictionary dictionary]);
}

但是當我按下按鈕時,我得到了這個錯誤:

錯誤Domain = com.apple.watchkit.errors代碼= 2“ iPhone應用程序中的UIApplicationDelegate從未在-[UIApplicationDelegate應用程序:handleWatchKitExtensionRequest:reply:]中調用Reply()”“ UserInfo = 0x7fd2b9c35ae0 {NSLocalizedDescription = iPhone應用程序中的UIApplicationDelegate從未在[[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]}中稱為reply()

我正在如上所示調用reply() ,但沒有看到它! 另外,它忽略了我在其中的其他代碼!

誰能解釋為什么會這樣?

從文檔中:

replyInfo:包含要返回到WatchKit應用程序的數據的字典。 字典的內容必須可序列化到屬性列表文件。 該詞典的內容由您自行決定,您可以指定nil。

如果您沒有發送有效的詞典,您將不會得到答復。

您需要在后台任務中在handleWatchKitExtensionRequest中執行所有工作。 您可以在這里找到文檔: https : //developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

該博客文章也可能會有所幫助: http : //www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply

錯誤“錯誤域= com.apple.watchkit.errors代碼= 2”錯誤通常表示您的應用程序的handleWatchKitKitExtensionRequest發生了錯誤,並且/或未調用reply()或未正確調用它。

該文檔位於: https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/#//apple_ref/occ/intfm/UIApplicationDelegate/application :handleWatchKitExtensionRequest: reply

這是使用NSDictionary響應的一些簡單示例代碼。

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{
    NSLog(@"containing app received message from watch");
    NSDictionary *response = @{@"response" : @"MyResponse"};
    reply(response);
}

如果您的詞典包含自定義類,則可能會遇到麻煩。 嘗試先發送簡單的字符串,看看是否有區別。

檢查您的“重要和機密”代碼沒有引發異常,或者完成后不調用回復(例如,錯誤負載)。

您的“重要和機密”代碼必須非常快。 如果不是這種情況,則必須使用后台任務 (請參閱此處的示例)。

最后,如果您的代碼需要時間,可以訪問網絡,請考慮使用后台任務。 如果您使用異步網絡任務(推薦),請在收到答案后回復,然后完成后台任務。

最后但並非最不重要的一點是,在某些iOS版本上,對parentApplication的首次調用失敗: WatchKit App中openParentApplication的行為不一致 這為我解決了最后一個問題!

希望有幫助;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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