我正试图遵循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?
答案 0 :(得分:1)
解决方案是
image = UIImage(data: NSData(contentsOfURL: content as NSURL)!)
感谢
答案 1 :(得分:0)
您想要使用NSData.dataWithContentsOfFile(content)
。