2015-09-28 28 views
5

この質問は別の形式で以前に聞かれていたかもしれませんが、共有拡張を理解するための少し深めの試みです。この質問の以前に尋ねられたバージョン。共有拡張を書くとき、私たちはSLComposeServiceViewControllerをサブクラスとのviewDidLoadを(得ることができますSLComposeServiceViewControllerのURLをiOSのSafariの共有拡張で取得する

)および他の中didSelectPost()イベントが、VC上の唯一のプロパティは、Appleのドキュメント

に応じcontentTextとのTextViewとプレースホルダのプロパティですhttps://developer.apple.com/library/prerelease/ios/documentation/Social/Reference/SLComposeServiceViewController_Class/

これが事実であることを考えると、以下のことの最善の方法は何か:ウェブサイトのURLが表示されますVCを移入、まず

第二に

let shareDefaults = NSUserDefaults(suiteName: "groupName") 
shareDefaults?.setObject(self.contentText, forKey: "stringKey") 
shareDefaults?.synchronize() 

を次のようにアプリから後でアクセスするためにそれを保存することができるようにsharedDefaultsに渡すURLにアクセスします。

URLの取得に関する助けがあれば、大歓迎です。

答えて

8

あなたはこのようにURLにアクセスすることができます。ここでは

- (void)didSelectPost { 
    NSExtensionItem *item = self.extensionContext.inputItems.firstObject; 
    NSItemProvider *itemProvider = item.attachments.firstObject; 
    if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) { 
     [itemProvider loadItemForTypeIdentifier:@"public.url" 
             options:nil 
           completionHandler:^(NSURL *url, NSError *error) { 
            // Do what you want to do with url 
            [self.extensionContext completeRequestReturningItems:@[]   
                    completionHandler:nil]; 
           }]; 
    } 
} 

は、スウィフトに同じである:あなたがじゃないので

override func didSelectPost() { 
     if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
      if let itemProvider = item.attachments?.first as? NSItemProvider { 
       if itemProvider.hasItemConformingToTypeIdentifier("public.url") { 
        itemProvider.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: { (url, error) -> Void in 
         if let shareURL = url as? NSURL { 
          // do what you want to do with shareURL 
         } 
         self.extensionContext?.completeRequestReturningItems([], completionHandler:nil) 
        }) 
       } 
      } 
     } 
    } 
+3

"public.urlは、" 'kUTTypeURL'に置き換えることができますハードコードされた文字列を使用します。 'kUTTypeURLを文字列'に、 'import MobileCoreServices'をSwiftに追加しました。 – timgcarlson

関連する問題