2015-09-28 7 views
5

To pytanie mogło zostać zadane wcześniej w innej formie, ale próbuję nieco głębiej próbować zrozumieć udostępnianie rozszerzeń, dlatego też to pytanie ma więcej szczegółów niż poprzednio zadana wersja tego pytania.Uzyskiwanie adresu URL w SLComposeServiceViewController w rozszerzeniu udziału przeglądarki Safari w systemie iOS

Pisząc rozszerzeniem Poleć możemy podklasy SLComposeServiceViewController i uzyskać viewDidLoad() i didSelectPost() wydarzenia między innymi, ale tylko właściwości na VC są contentText i TextView i właściwości zastępczy według dokumentacji firmy Apple

https://developer.apple.com/library/prerelease/ios/documentation/Social/Reference/SLComposeServiceViewController_Class/

Biorąc pod uwagę, że jest to przypadek, jaki jest najlepszy sposób następujący sposób:

po pierwsze, podczas wypełniania VC, który pojawia się z adresem URL strony

drugie, Dostęp do URL przejść do sharedDefaults następująco

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

, tak aby być w stanie zapisać do późniejszego dostępu z aplikacji.

Każda pomoc dotycząca uzyskania adresu URL byłaby bardzo doceniana.

Odpowiedz

8

Można uzyskać dostęp do adresu URL tak:

- (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]; 
           }]; 
    } 
} 

Tu jest taka sama w Swift:

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" może być zastąpiony 'kUTTypeURL' więc nie jesteś używając zakodowanego na stałe ciągu. 'kUTTypeURL jako String' i' import MobileCoreServices' w Swift. – timgcarlson

Powiązane problemy