ios swift app扩展分享图片

时间:2015-01-08 21:33:46

标签: ios swift ios-app-extension

我正试图遵循Vandad Nahavandipoor的书“iOS 8 Swift Programming Cookbook 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?

2 个答案:

答案 0 :(得分:1)

解决方案是

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

感谢

Unable to cast UIImage in swift iOS 8 Extension

答案 1 :(得分:0)

您想要使用NSData.dataWithContentsOfFile(content)