iOS 8 Share Extension Attachments — Xcode — Swift

Я добавил расширение Share Extension в свое приложение для iOS и создал собственный пользовательский интерфейс, используя UIViewController, а НЕ SLComposeServiceViewController по умолчанию. Пользовательский интерфейс работает, но как мне обратиться к файлам, которые были выбраны для общего доступа? Например, если я нажимаю «Поделиться» на фотографии, как мне обратиться к этой фотографии и преобразовать ее в NSData. В настоящее время у меня есть этот код, но когда он запускается, данные никогда не инициализируются. Что я делаю не так?

    //Runs when button is pressed
    inputItem = extensionContext!.inputItems.first as NSExtensionItem
    attachment = inputItem.attachments![0] as NSItemProvider
    attachment.loadItemForTypeIdentifier(kUTTypeJPEG as String,
        options: nil,
        completionHandler: {(content, error: NSError!) in
            let url = content as? NSURL
            if let data = NSKeyedArchiver.archivedDataWithRootObject(url!) as NSData?{
                self.imageChosen = UIImage(data: data)!
                //Never runs
            }
            else {
                //Always runs
            }

    })

Кроме того, как сделать, чтобы кнопка расширения исчезла, если выбранное вложение содержит более одного файла (фото или видео) или имеет недопустимый тип файла. Любой ответ приветствуется. Заранее спасибо.


person Arvin Zadeh    schedule 06.04.2015    source источник
comment
Как выглядит NSExtensionActivationRule для этого расширения?   -  person Tom Harrington    schedule 08.04.2015


Ответы (1)


Вот как я предпочитаю делиться изображениями и файлами:

//when the share button is pressed, default share phrase is added, cropped image of highscore is added

    var sharingItems = [AnyObject]()

    var shareButtonHighscore = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as Int!

    sharingItems.append("I am sharing \(shareButtonHighscore)!")

    UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    sharingItems.append(image)

    let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil)

    activityViewController.excludedActivityTypes = [UIActivityTypeCopyToPasteboard,UIActivityTypeAirDrop,UIActivityTypeAddToReadingList,UIActivityTypeAssignToContact,UIActivityTypePostToTencentWeibo,UIActivityTypePostToVimeo,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo]

    self.presentViewController(activityViewController, animated: true, completion: nil)

Надеюсь это поможет!

person tdh    schedule 06.04.2015
comment
Ах, я думаю, это для обмена в приложении. Что мне нужно, так это способ, чтобы когда вы нажимали «Поделиться» на фотографии или файле в своей библиотеке фотографий или Safari, он ссылался на файл и преобразовывал его в NSData. В любом случае спасибо, это может быть полезно для будущих игр, которые я буду делать. - person Arvin Zadeh; 06.04.2015