2016-08-27 5 views
0

여러 메시지를 보내야 응용 프로그램 메시지가 여러 번 표시됩니다. 그러나 콘솔 공연이 오류 :Swift에서 하나 이상의 응용 프로그램 메시지를 호출 할 수 없습니다.

2016-08-27 19:27:17.237 AlertaTel 2.0[841:263754] Attempt to present <MFMessageComposeViewController: 0x15e19ba00> on <AlertaTel_2_0.ViewController: 0x15de43af0> which is waiting for a delayed presention of <MFMessageComposeViewController: 0x15e24ca00> to complete 

나는 (내가 더 지향 Swfit 해요)도 언어를 마스터하지 않는 정직하게이 문제에 대한이 사이트에 읽을 수 있지만 Objective- C의 솔루션 또는 주제를 발견하고 . 의 ViewController에서

class MessageComposer: NSObject, MFMessageComposeViewControllerDelegate { 

// A wrapper function to indicate whether or not a text message can be sent from the user's device 
func canSendText() -> Bool { 
    return MFMessageComposeViewController.canSendText() 
} 

// Configures and returns a MFMessageComposeViewController instance 
func configuredMessageComposeViewController(unicaVariable : String) -> MFMessageComposeViewController { 
    let messageComposeVC = MFMessageComposeViewController() 
    messageComposeVC.messageComposeDelegate = self // Make sure to set this property to self, so that the controller can be dismissed! 
    messageComposeVC.recipients = textMessageRecipients 
    messageComposeVC.body = "Estoy en peligro, aca esta mi última ubicación: https://maps.google.com/maps?q="+(view.locationManager.location?.coordinate.latitude.description)!+","+(view.locationManager.location?.coordinate.longitude.description)!+". "+(unicaVariable) 
    //view.performRequestAndUpdateUI() 
    return messageComposeVC 

} 

// MFMessageComposeViewControllerDelegate callback - dismisses the view controller when the user is finished with it 
func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) { 
    controller.dismissViewControllerAnimated(true, completion: nil) 
} 

}

MessageComposer

클래스 :

나는 내 코드를 부착

func levantarMensaje(datoWebService: String){ 
    if (messageComposer.canSendText()) { 
     let messageComposeVC = messageComposer.configuredMessageComposeViewController(datoWebService) 
     presentViewController(messageComposeVC, animated: true, completion: nil) 

    } else { 
     // Let the user know if his/her device isn't able to send text messages 

    } 
} 

그리고 나는 @IBAction이 메소드를 호출

@IBAction func sendTextMessageButtonTapped(sender: UIButton) { 
    levantarMensaje() 
} 

IBAction에 간단한 "FOR"를 구현하면 위에서 보여준 오류가 나타납니다.

답변 해 주셔서 감사합니다.

+0

오류 : 2016년 8월 27일 19 : 27 : 17.237 AlertaTel 2.0 [841 : 263754] 제시하려는 시도 지연에서 프레젠테이션을 기다리고있는 완료하려면

답변

2

이전 모달 프레젠테이션이 여전히 움직이는 동안 모달 프레젠테이션을 시작하려고합니다. UIKit은 그렇게하지 않습니다. 다음 프레젠테이션을 시작하기 전에 프레젠테이션이 끝날 때까지 기다려야합니다. 이 작업에는 몇 가지 방법이 있습니다.

첫 번째는 여러 모달 프레젠테이션을 동시에 수행하는 것이지만 동시에 애니메이션이 동시에 발생하지 않도록하는 것입니다. 호출을 presentViewController(_:, animated:, completion:)으로 변경하여 completion 인수를 사용하여 다음 메시지보기 컨트롤러를 표시하면됩니다. 그런 식으로 첫 번째 메시지보기가 나타나고 이 완료되면 다음 애니메이션이 시작됩니다.

다른 하나는 다음 메시지를 보내기 전에 하나의 메시지가 전송되거나 취소 될 때까지 기다리는 것입니다. 이를 위해서는 controller.dismissViewControllerAnimated(true, completion: nil)을 위에서 설명한 것과 비슷한 것으로 대체하십시오. completion 인수에 nil을 전달하는 대신 다음 메시지 뷰를 제공하는 클로저를 전달하십시오. 완전한

관련 문제