![](/img/trans.png)
[英]“The UIApplicationDelegate in the iPhone App never called reply() ” - Xamarin
[英]“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.