0

iOS5.1のXcode4.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-Simulatorで実行すると、MFMessageComposeViewControllerをインスタンス化できず、常にnilが生成されることです。

MFMessageComposeViewControllerと互換性があり、MFMessageComposeViewControllerのような同じメソッドで渡すことができるiOSシミュレーターで別のオブジェクトMyOwnMFMessageComposeViewControllerを作成する方法はありますか?

このようなもの:

    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 に答える