나는 Vandad Nahavandipoor의 책 iOS 8 Swift Programming Cookbook (O'REILLY 2014 년 11 월 초판)에서 2.2를 따르려고합니다.이미지를 공유 할 수있는 신속한 앱 확장
나는 이미 텍스트의 일부 버그를 이해하고 있지만이 하나가 저를 곤혹스럽게합니다.
사람들이 내 사이트에 이미지를 업로드 할 수 있도록 내 앱의 공유 확장 프로그램을 만들려고합니다.
확장 프로그램이 마지막에 표시된다는 점에서 확장 기능이 작동하며 클릭하면 제목이 표시되고 이미지가 표시되지만 POST는 활성화되어 있지만 비활성화되어 있습니다. 나는 iOS에 익숙하지 않아서 무엇을 해야할지 잘 모르겠습니다. 그는 내가 건너 청중 선택기를 추가 계속 섹션에서
, 나는 그것의 일부가 될 수있는 느낌이,하지만 난에 넣어하지 않았다, 그래서 그 옵션이 없습니다.
여기 내 주 연장 난 그냥 공유 팝업에서 POST 액션을 사용하려면
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()
//}
}
코드입니다. 미리 감사드립니다.
EDIT
계속 하시겠습니까? 선택한 이미지의 imageData가 0이라는 사실을 발견했습니다. 콘텐츠
if let data = content as? NSData{ ...}
실패 라인의 값
file:///var/mobile/Media/DCIM/100APPLE/IMG_0001.JPG
를 보유하고있다. 이 이미지를 NSData로 읽으려면 어떻게해야합니까?
에
덕분 –
그래서 그것이 오류 누락 상기 [옵션 입력을 첨가, 그래서 에러를 첨가 'NSSecureCoding !, 옵션 : NilLiteralConvertible, ioout 오류 : NSError!'형식의 인수 목록을 사용하여 'dataWithContentsOfFile'을 호출 할 수 없습니다. –
또한 여기에 해당 NSData (contentsOfFile : c ontent) -하지만 여전히 작동하지 않습니다. –