2015-01-08 2 views
0

나는 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로 읽으려면 어떻게해야합니까?

답변

0

NSData.dataWithContentsOfFile(content)을 사용하고 싶습니다.

+0

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

덕분 –

+0

그래서 그것이 오류 누락 상기 [옵션 입력을 첨가, 그래서 에러를 첨가 'NSSecureCoding !, 옵션 : NilLiteralConvertible, ioout 오류 : NSError!'형식의 인수 목록을 사용하여 'dataWithContentsOfFile'을 호출 할 수 없습니다. –

+0

또한 여기에 해당 NSData (contentsOfFile : c ontent) -하지만 여전히 작동하지 않습니다. –

관련 문제