Окно NSAlert OS X не закроется в xCode 8 в Objective-C

Я использовал метод ниже в xCode 7, чтобы показать предупреждения / ошибки. Я знаю, что alertWithMessageText устарела. Если я использую этот метод в xCode 8 (хотя и устарел), окно не закрывается, когда пользователь нажимает кнопку Ok. Я посмотрел на десятки постов, чтобы заменить его на beginSheetModalForWindow: завершение, и не смог заставить его работать. Некоторые примеры кода будут с благодарностью.

(Я получаю следующее консольное сообщение при запуске метода xCode 7: 2016-10-12 15:35:23.537072 eBuyBooks[7886:2192964] [Layout] Обнаружены отсутствующие ограничения для. Его нельзя разместить, так как недостаточно ограничений для полностью определите размер и происхождение. Добавьте недостающие ограничения или установите translatesAutoresizingMaskIntoConstraints=YES, и ограничения будут сгенерированы для вас. Если это представление выложено вручную в macOS 10.12 и более поздних версиях, вы можете не вызывать [super layout] из вашего переопределить. Установите точку останова на DETECTED_MISSING_CONSTRAINTS для отладки. Эта ошибка будет зарегистрирована только один раз.)

// in Header file
NSAlert * alertWithOkButton;

.....

// in implementation file
- (void)errorPopUp:(NSString *)reason detail:(NSString *)detail {

    alertWithOkButton = [NSAlert alertWithMessageText:reason
                                        defaultButton:@"Ok"     
                                      alternateButton:nil       
                                          otherButton:nil       
                            informativeTextWithFormat:@"%@",detail];

    [alertWithOkButton runModal];    
}

1 ответ

Попробуйте это как замену, это не рекомендуется:

// in implementation file
- (void)errorPopUp:(NSString *)reason detail:(NSString *)detail {
        NSAlert *alert = [[NSAlert alloc] init];
        [alert setMessageText:reason];
        [alert setInformativeText:detail];
        [alert setAlertStyle:NSCriticalAlertStyle]; // or NSWarningAlertStyle, or NSInformationalAlertStyle
        [alert addButtonWithTitle:@"OK"];

        [alert runModal];
}

Чтобы установить символическую точку останова, перейдите в Навигатор точек останова (маленькая контурная стрелка в левом верхнем углу окна вашего проекта), нажмите "+" в левом нижнем углу окна, выберите "Символическая точка останова" и введите DETECTED_MISSING_CONSTRAINTS для символа.

Если точка останова попадет, вы можете ввести po $arg1 в представлении отладчика вывести описание представления, в котором отсутствуют ограничения.

Другие вопросы по тегам