0

由于在 iOS 5.1 上使用 Xcode 4.3 进行调试非常慢,因此在设备上启动/安装应用程序时,我使用启动速度更快的模拟器。(请参阅我关于此问题的问题https://stackoverflow.com/questions/11541288/xcode-4-3-with-ios5-1-pauses-about-10secs-when-debug-starts-simulator-starts-i

所以我需要做的就是这样的:

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 不能被实例化并且总是产生 nil。

有没有办法在 iOS 模拟器上创建另一个对象 MyOwnMFMessageComposeViewController,它与 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];
4

1 回答 1

1

您正在寻找的东西称为“模拟对象”,通常用于测试驱动开发。基本上你所做的是创建一个 MFMessageComposeViewController 的子类。这个子类的工作方式与 mfmessagecomposeviewcontroller 完全相同,除了您还创建实例变量以显示发生了某些事情。

例如,当您的委托调用 messageComposeViewController:didFinishWithResult 时。模拟对象可能会存储结果和该方法已被触发的标志。请注意,这实际上不会发送任何内容,而只是告诉您委托已触发并且在真实对象上将起作用。

于 2012-07-24T16:03:55.130 回答