2016-05-20 3 views
1

Xamarinを使ってiOSアプリケーションを開発しています。 URLを共有するためにChromeから拡張機能を開くと、[投稿]ダイアログが表示されます。投稿がヒットしたら、共有URLの入力を求めます。プロンプトのダイアログは表示されますが、空です。私は正しくURLを抽出していないようです。拡張コンテキストからURLを抽出

次のコードを使用して、拡張コンテキストからURLを抽出しています。ここで

var urlstr = string.Empty; 
var item = ExtensionContext.InputItems[0]; 
NSItemProvider prov = null; 

if (item != null) 
    prov = item.Attachments[0]; 

if (prov != null) 
{ 
    prov.LoadItem(UTType.URL, null, (NSObject url, NSError error) => 
    { 
     if (url == null) 
       return; 

     NSUrl newUrl = (NSUrl)url; 
     urlstr = newUrl.ToString(); 
    }); 


    UIAlertController alert = UIAlertController.Create("Share extension", urlstr, UIAlertControllerStyle.Alert); 

    PresentViewController(alert, true,() => 
    { 
     DispatchQueue.MainQueue.DispatchAfter(new DispatchTime(DispatchTime.Now, 5000000000),() => 
     { 
        ExtensionContext.CompleteRequest(null, null); 
      }); 
    }); 
} 

LoadItemが非同期であるためのInfo.plistファイルから辞書

<dict> 
    <key>NSExtensionActivationRule</key> 
    <string>TRUEPREDICATE</string> 
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key> 
    <integer>1</integer> 
    <key>NSExtensionActivationSupportsWebPageWithMaxCount</key> 
    <integer>1</integer> 
    </dict> 

答えて

1

です。コールした直後に警告ダイアログを表示します。ダイアログを表示しているときにurlstrが設定されていません。完了ハンドラの警告ダイアログをLoadItemに表示する必要があります。

prov.LoadItem(UTType.URL, null, (NSObject url, NSError error) => 
{ 
    if (url == null) 
      return; 

    NSUrl newUrl = (NSUrl)url; 
    urlstr = newUrl.ToString(); 

    UIAlertController alert = UIAlertController.Create("Share extension", urlstr, UIAlertControllerStyle.Alert); 

    PresentViewController(alert, true,() => 
    { 
     DispatchQueue.MainQueue.DispatchAfter(new DispatchTime(DispatchTime.Now, 5000000000),() => 
     { 
        ExtensionContext.CompleteRequest(null, null); 
      }); 
    }); 
}); 
関連する問題