在iPhone上模拟发送的短信
问题描述:
由于在iOS 5.1上使用Xcode 4.3进行调试的速度非常慢,因此在设备上启动/安装应用程序时,我使用的模拟器启动速度要快得多。 (见我的问题关于这个问题在这里https://*.com/questions/11541288/xcode-4-3-with-ios5-1-pauses-about-10secs-when-debug-starts-simulator-starts-i)在iPhone上模拟发送的短信
因此,所有我需要做的是这样的:
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = delegate;
NSString *s = @"1234567";
picker.recipients =[NSArray arrayWithObject: s];
picker.body =smsTxt;
if (simulationMode) {
MessageComposeResult result = MessageComposeResultSent; <-----------
[delegate messageComposeViewController:picker didFinishWithResult: result];
} else
[delegate presentModalViewController:picker animated:YES];
这里的问题是,现在在iOS模拟器运行时MFMessageComposeViewController不能实例化并总是产生零。
有没有办法在iOS模拟器上创建另一个对象,它与MFMessageComposeViewController兼容,并可以像MFMessageComposeViewController一样传递?
事情是这样的:
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = delegate;
NSString *s = @"1234567";
picker.recipients =[NSArray arrayWithObject: s];
picker.body =smsTxt;
if (simulationMode) {
MyOwnMFMessageComposeViewController *mypicker = [[MFMessageComposeViewController alloc] init];
mypicker.messageComposeDelegate = delegate;
NSString *s = @"1234567";
mypicker.recipients =[NSArray arrayWithObject: s];
mypicker.body =smsTxt;
MessageComposeResult result = MessageComposeResultSent;
picker = (MFMessageComposeViewController) mypicker;
[delegate messageComposeViewController:picker didFinishWithResult: result];
} else
[delegate presentModalViewController:picker animated:YES];
答
什么你正在寻找被称为“模拟对象”,往往是在测试驱动开发。基本上你所做的是创建一个MFMessageComposeViewController的子类。这个子类与mfmessagecomposeviewcontroller的工作方式完全一样,除了你还创建实例变量来显示发生了什么事情。
因此,例如,当您的委托调用messageComposeViewController:didFinishWithResult。模拟对象可能会存储结果并标记该方法已被触发。请注意,这不会实际发送任何内容,只是简单地告诉您,委托人被解雇并且在真实对象上工作。
我将如何创建一个“模拟对象”,它产生的东西不是零时创建?我定义了一个MFMessageComposeViewController的子类,并写了MyMFMessageComposeViewController * myPicker = [[MyMFMessageComposeViewController alloc] init]; - > myPicker仍然是零?谢谢! – user387184 2012-07-24 16:09:39
嗯......它可能是因为它的子类不能在模拟器上工作,所以子类仍然是零。试试把它作为nsobject的一个子类来响应你的委托协议 – Msencenb 2012-07-24 16:21:07
是的 - 但是它不会和MFMessageComposeViewController具有相同的结构,而且我不能强制它成为MFMessageComposeViewController,所以我不能调用[delegate messageComposeViewController:picker didFinishWithResult:result]; - 这是我真正需要做的 – user387184 2012-07-24 16:22:59