2016-08-31 1 views
0

완성 처리기 내에 함수를 포함 할 수 있습니까?
사용자가 활동 컨트롤러에서 동일한 이미지를 공유 한 후 함수를 통해 이미지를 저장하려고합니다. 다음을 원합니다 :완성 처리기 내에 함수를 포함 할 수 있습니까?

let controller = UIActivityViewController(activityItems: [generateMemedImage()], applicationActivities: nil) 
     self.presentViewController(controller, animated: true, completion: nil) 
     controller.completionWithItemsHandler = { 
      // Have this save() function when the activity has been completed 
      func save() { 
       //Save the meme 
       let meme = Meme(topText: self.upperTextField.text!, lowerText: self.lowerTextField.text!, originalImage: 
        self.imageRetrieved.image!, memedImage: generateMemedImage()) 
      } 
     } 

더 좋은 해결책이 있습니까? 아니면 어떻게해야합니까?

+0

컨트롤러를 선언 한 곳과 같은 클래스에서 저장 함수를 작성한 다음 완료 핸들러에서이를 캡처하도록 할 수없는 이유는 무엇입니까? 핸들러에서 self.save()를 호출하십시오. – bolnad

+0

Daniel 감사합니다! 나는 당신의 제안을 사용하여 그것을 구해 냈다. 자네 말이 맞다. 내게 전화하는 것보다 완성 처리기 안에있는 기능을 갖기를 바보 취급했다. 잘됐다. 감사! –

답변

0

완성 처리기 안에 함수를 선언 할 필요가 없습니다. 그 안에 저장을 수행하는 코드를 작성하십시오.

class Controller: UIViewController { 

    func foo() { 
     let controller = UIActivityViewController(activityItems: [generateMemedImage()], applicationActivities: nil) 
     self.presentViewController(controller, animated: true, completion: nil) 
     controller.completionWithItemsHandler = { activityType, completed, returnedItems, error ->() in 
      // write code to perform the save here <--- 
     } 
    } 

    func generateMemedImage() -> [AnyObject] { 
     return [] 
    } 

} 
+0

그냥했지만 실행하지 않습니다. 중단 점을 사용하고 코드를 건너 뛰고 저장을 수행합니다 –

+1

이'print ("Completed!")를 사용하여 내 자리 표시 자 (이 줄'// 여기에서 저장을 수행하는 코드 작성 '을 의미)를 바꾸고 콘솔에 메시지가 표시됩니다. 또한이 코드는'UIActivityViewController'가 해제 될 때 실행된다는 것을 명심하십시오. –

+1

나쁘다. 인쇄가 끝났다. 내 코드와 완벽하게 작업했습니다! 나는 멈추고보기가 해산 될 때까지 기다리지 않았다. 감사 –

관련 문제