int pow( int base, int exponent)
{ // Does not work for negative exponents. (But that would be leaving the range of int)
if (exponent == 0) return 1; // base case;
int temp = pow(base, exponent/2);
if (exponent % 2 == 0)
return temp * temp;
else
return (base * temp * temp);
}
Я не знаю точно, как реализовано [alertView show]
, но я предполагаю, что он вносит некоторые изменения в иерархию представлений, а затем настраивается для отображения предупреждения следующий проход через цикл выполнения (найдите NSRunLoop
).
Но, поскольку приложение вот-вот завершится, управление не возвращается в цикл выполнения, поэтому предупреждение никогда не отображается. Вот почему вы видите тусклый экран (UIWindow уровня предупреждения немедленно добавляется с помощью show
), но предупреждение не появляется (это может произойти в цикле выполнения).
Если вы включите ] [[NSRunLoop currentRunLoop] run]
в конце обработчика исключений может появиться предупреждение.
Если вы хотите, чтобы ваше приложение завершило работу после того, как предупреждение будет выполнено, вы, вероятно, можете сделать это, вызвав NSRunLoop's runUntilDate:
в цикле while, проверяя значение флага, чтобы узнать, было ли предупреждение отклонено. Если это так, просто выйдите из функции обработчика, и все готово. Это означает, что вам нужно будет установить объект делегата для оповещения, который устанавливает этот флаг.
Если вы хотите, чтобы ваше приложение продолжало работать ... в этом я не уверен. Вы можете просто позволить циклу выполнения продолжать выходить из обработчика исключений, но это может иметь плохие / странные побочные эффекты. Так что вы, вероятно, должны позволить приложению выйти. Кроме того, если вы уверены, что сможете восстановиться после исключения, вы должны были где-то его поймать.
Мне нужно будет установить объект делегата для оповещения, который устанавливает этот флаг.Если вы хотите, чтобы ваше приложение продолжало работать ... я не уверен. Вы можете просто позволить циклу выполнения продолжать выходить из обработчика исключений, но это может иметь плохие / странные побочные эффекты. Так что вы, вероятно, должны позволить приложению выйти. Кроме того, если вы уверены, что сможете восстановиться после исключения, вы должны были где-то его поймать.
Мне нужно будет установить объект делегата для оповещения, который устанавливает этот флаг.Если вы хотите, чтобы ваше приложение продолжало работать ... я не уверен. Вы можете просто позволить циклу выполнения продолжать выходить из обработчика исключений, но это может иметь плохие / странные побочные эффекты. Так что вам, вероятно, следует позволить приложению выйти. Кроме того, если вы уверены, что сможете восстановиться после исключения, вы должны были где-то его поймать.
Вы должны проверить, достигнут ли код или просто возникла проблема с отображением.
NSLog прояснит это.
Если не достигнут, вам нужно предотвратить завершение работы приложения, и вы можете требуется отложенное действие, чтобы выйти из этого контекста для вызова предупреждения:
[self performSelector: @selector(showAlert:) withObject:@"msg" afterDelay: 0.1];
Если вы достигли его и контекст выполнения не является проблемой, но вы просто не видите предупреждения, то [отображение предупреждений] может быть не на верхнем уровне в дисплей. В таком случае вам может потребоваться перенаправить сообщение через showinview, например, с помощью таблицы действий:
topDelegate=[[UIApplication sharedApplication] delegate];
topDelegateWindow=[topDelegate.window.subviews objectAtIndex:0];
[actionSheet showInView:topDelegateWindow];