Имитация отправленных SMS на iPhone
Поскольку при запуске / установке приложения на устройстве Xcode 4.3 на iOS 5.1 выполняется очень медленно, я использую симулятор, который запускается намного быстрее. (см. мой вопрос относительно этой проблемы здесь https://stackru.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 не может быть создан и всегда дает ноль.
Есть ли способ создать еще один объект MyOwnMFMessageComposeViewController на симуляторе 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];
1 ответ
То, что вы ищете, называется "фиктивным объектом" и часто используется в тестовой разработке. По сути, вы создаете подкласс MFMessageComposeViewController. Этот подкласс работает точно так же, как и mfmessagecomposeviewcontroller, за исключением того, что вы также создаете переменные экземпляра, чтобы показать, что что-то произошло.
Например, если ваш делегат вызывает messageComposeViewController: didFinishWithResult. Ложный объект, скорее всего, будет хранить результат и флаг, что этот метод был запущен. Обратите внимание, что на самом деле это ничего не отправит, а просто скажет, что делегат сработал и на реальном объекте будет работать.