Репост с более кратким и конкретным вопросом после того, как исходный вопрос остался без ответа. Также добавление большего понимания проблемы после еще одного дня исследования:
В моем делегате приложения ( didFinishLaunching
) я настроил callEventHandler
на CTCallCenter
.
Идея состоит в том, что при изменении callState я отправляю уведомление с помощью userInfo dict
содержащий call.callState
. На мой взгляд, я наблюдаю это уведомление, и когда
userInfo
dict содержит значение CTCallDisconnected
, я хочу отобразить представление.
Проблема, с которой я столкнулся, заключается в том, что скрытый аспект почти постоянно занимает ~ 7 секунд .
Все остальное работает нормально, и я знаю это, потому что я NSLog
до и после раскрытия,
и эти журналы появляются немедленно, но чертово представление все еще задерживается на 7 секунд.
Вот мой код:
appDidFinishLaunching:
self.callCenter = [[CTCallCenter alloc] init];
self.callCenter.callEventHandler = ^(CTCall* call) {
// anounce that we've had a state change in our call center
NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:self userInfo:dict];
};
Затем я слушаю это уведомление, когда пользователь нажимает кнопку, которая набирает номер телефона:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ctCallStateDidChange:) name:@"CTCallStateDidChange" object:nil];
Затем в ctCallStateDidChange:
- (void)ctCallStateDidChange:(NSNotification *)notification
{
NSLog(@"121");
NSString *callInfo = [[notification userInfo] objectForKey:@"callState"];
if ([callInfo isEqualToString:CTCallStateDisconnected]) {
NSLog(@"before show");
[self.view viewWithTag:kNONEMERGENCYCALLSAVEDTOLOG_TAG].hidden = NO;
NSLog(@"after show");
}
}
я отследил проблему до условия if в приведенном выше примере кода:
if ([[userInfo valueForKey:@"userInfo"] valueForKey:@"callState"] == CTCallStateDisconnected) {
Если я просто заменю это на:
if (1 == 1) {
, то представление появится немедленно!
дело в том, что эти операторы NSLog
регистрируются немедленно, но представление
отстает в нем. Как это условие могло вызвать только часть его блока?
выполнить немедленно, а остальное подождать ~ 7 секунд?
Спасибо!