Xamarin 프로젝트에서 Forms를하고 Xam.Plugins.Messaging을 통합하여 내 응용 프로그램에서 SMS를 보냈습니다. 이를 위해 나는 아래의 코드 내 아이폰 OS 프로젝트에서 사용자 정의 렌더러를 만들었습니다경고 : Xamarin.Forms의 창 계층 구조에보기가 없습니다.
AppDelegate smsObj = new AppDelegate();
bool a= smsObj.ShowAndSendSMS(new string[] { "123" }, "Hi there");
그리고 내 AppDelegate에, 나는 아래와 같은 코드가 있습니다
public bool ShowAndSendSMS(string[] recipients, string body)
{
UIViewController sms = new UIViewController();
if (MFMessageComposeViewController.CanSendText)
{
MFMessageComposeViewController message = new MFMessageComposeViewController();
message.Finished += (sender, e) => {
message.DismissViewController(true, null);
};
message.Body = body;
message.Recipients = recipients;
sms.PresentModalViewController(message, false);
}
return true;
}
내가 직면하고 문제가에 내 처음 앱을 실행하면 SMS를 공유하는 기능이 작동하지 않고 디버그 로그에 "보기가 창 계층 구조에 있지 않습니다."라는 경고가 표시됩니다.
그러나 앱을 다시 시작하면 동일한 기능이 매력처럼 작동합니다. 내가 실수 한 곳에서 아이디어를 얻었습니까?
여기 있습니다 : https://www.dropbox.com/s/ncd9r2za3voeewu/AppDelegate.cs?dl=0 –
고마워요! 또한, AppDelegate smsObj = new AppDelegate() 줄은 어디에 있습니까? 다른 AppDelegate 인스턴스를 새로 작성하지 않아야합니다. 일부 SMS 도우미 클래스로 ShowAndSendSMS를 리팩토링하거나 Mono가 회전하는 AppDelegate 인스턴스를 보유 할 정적 싱글 톤을 만들어 코드 전체에서 해당 참조를 사용할 수 있습니다. 개인적으로 책임 분리 관점에서 SMS 도우미 클래스를 사용합니다. –
그래서 아래의 AppDelegate 인스턴스를 생성하는 iOS 프로젝트에서 사용자 정의 렌더러를 만들었습니다. public class SMS_Ios : PageRenderer { private readonly TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext(); 보호 된 무효 OnElementChanged (VisualElementChangedEventArgs e) { base.OnElementChanged (e); AppDelegate smsObj = 새 AppDelegate(); bool a = smsObj.ShowAndSendSMS (새 문자열 [] { "123"}, "안녕하세요"); } } } –