Конкретное выражение в условии, если условие вызывает 7-секундную задержку выполнения

Возможный дубликат:
отображение представление выполняется очень медленно в CTCallCenter callEventHandler

Я застрял на проблеме в течение двух дней. Вчера я спрашивал на SO, но пока не смог найти решение. Я решил сделать репост и попытаться быть более конкретным, так как у меня больше опыта в этом вопросе.

В моем делегате приложения (didFinishLaunching) я настроил callEventHandler на CTCallCenter. Идея состоит в том, что когда callState изменяется, я публикую уведомление с userInfo dict, содержащим call.callState. С моей точки зрения, я наблюдаю это уведомление, и когда словарь userInfo содержит значение CTCallDisconnected, я хочу отобразить представление.

Проблема, с которой я сталкиваюсь, заключается в том, что отображение аспекта занимает почти постоянно ~ 7 секунд. Все остальное работает нормально, и я знаю это, потому что я NSLog до и после показа, и эти журналы появляются сразу, но проклятый вид все равно лагает на 7 секунд.

Вот мой код:

приложениеDidFinishLaunching:

    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:(NSDictionary *)userInfo {NSLog(@"121");
   if ([[userInfo valueForKey:@"userInfo"] valueForKey:@"callState"] == CTCallStateDisconnected) {
    NSLog(@"before show");
    ((SavedToCallLogView *)[self.view viewWithTag:kNONEMERGENCYCALLSAVEDTOLOG_TAG]).hidden = false;
    NSLog(@"after show");
}

Я отследил проблему до условия if в приведенном выше примере кода:

   if ([[userInfo valueForKey:@"userInfo"] valueForKey:@"callState"] == CTCallStateDisconnected) {

Если я просто заменю это на:

if (1 == 1) {

Тогда вид появляется сразу!

Дело в том, что эти операторы NSLog регистрируются немедленно, но представление отстает в его отображении. Как это условие может привести к тому, что только часть его блока будет выполняться немедленно, а остальная часть будет ждать ~ 7 секунд?

Спасибо!


person djibouti33    schedule 09.06.2011    source источник
comment
я связался с той же статьей в верхней части этого поста ... этот вопрос потерял актуальность, поэтому я подумал, что спрошу еще раз, более кратко, без всего беспорядка, созданного предыдущим постом.   -  person djibouti33    schedule 09.06.2011
comment
Это понятно, но предпочтительным способом сделать это по-прежнему является редактирование вашего предыдущего сообщения: Как привлечь внимание к своим старым вопросам без ответов Это выведет их на главную страницу, где они снова будут очень заметны. Детали, которые вы представили здесь, определенно делают вопрос более доступным, и я думаю, что они во многом помогут найти ответы на другой пост.   -  person jscs    schedule 09.06.2011