ios swift 分享图片的应用扩展

ios swift app extension to share image

我正在尝试遵循 Vandad Nahavandipoor 的书 iOS 8 Swift 编程指南 O'REILLY 2014 年 11 月第一版中的 2.2。

我理解并已经纠正了文本中的一些错误,但是这个让我难住了。

我正在尝试为我的应用程序创建共享扩展,以便人们可以将图片上传到我的网站。

扩展的工作原理是它出现在最后,当您单击它时,它会为您提供放置标题和显示图像的位置,但是,POST 未激活但已禁用。我是 iOS 的新手,所以我不太确定该怎么做。

在他继续添加我跳过的观众选择器的部分中,我感觉可能是其中的一部分,但我没有那个选项,所以我没有把它放进去。

这是我的分享扩展的代码

import UIKit
import Social
import MobileCoreServices


class ShareViewController: SLComposeServiceViewController, NSURLSessionDelegate {

var imageData: NSData?

override func isContentValid() -> Bool {    
    if let data = imageData {
        if countElements(contentText) > 0 {
            return true
        }
    }
    return false
}

override func presentationAnimationDidFinish() {
    super.presentationAnimationDidFinish()
    placeholder = "Title"

    let content = extensionContext!.inputItems[0] as NSExtensionItem
    let contentType = kUTTypeImage as NSString

    for attachment in content.attachments as [NSItemProvider]{
        if attachment.hasItemConformingToTypeIdentifier(contentType){
            let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
            dispatch_async(dispatchQueue, {[weak self] in
                let strongSelf = self!
                attachment.loadItemForTypeIdentifier(contentType, options: nil, completionHandler: {(content: NSSecureCoding!, error: NSError!) in
                    if let data = content as? NSData {
                        dispatch_async(dispatch_get_main_queue(), {
                            strongSelf.imageData = data
                            strongSelf.validateContent()
                        })
                    }
                })
            })
        }
        break
    }
}

override func didSelectPost() {
    //TODO if no FBSession - then don't do it
    let token = FBSession.activeSession().accessTokenData.accessToken

    let identifier = NSBundle.mainBundle().bundleIdentifier! + "." + NSUUID().UUIDString
    let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(identifier)

    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
    let url = NSURL(string: "http://...&text="+self.contentText)

    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"
    request.HTTPBody = imageData!

    let task = session.uploadTaskWithRequest(request, fromData: request.HTTPBody)

    task.resume()

    extensionContext!.completeRequestReturningItems([], completionHandler: nil)

}

// override func configurationItems() -> [AnyObject]! {
    // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
//    return NSArray()
//}

}

我只想在共享弹出窗口中启用 POST 操作。提前致谢

EDIT

继续,我发现问题是所选图像的 imageData 为零。内容包含值

file:///var/mobile/Media/DCIM/100APPLE/IMG_0001.JPG

在第

if let data = content as? NSData{ ...}

失败。我如何以 NSData 形式读取此图像?

您需要使用 NSData.dataWithContentsOfFile(content)

解决方案是

image = UIImage(data: NSData(contentsOfURL: content as NSURL)!)

感谢

Unable to cast UIImage in swift iOS 8 Extension