2016-10-12 1 views
0

Я использовал метод, приведенный ниже в xCode 7, для отображения предупреждений/ошибок. Я знаю, что alertWithMessageText устарел. Если я использую этот метод в xCode 8 (хотя и устарел), окно не закрывается, когда пользователь нажимает кнопку «ОК». Я просмотрел десятки сообщений, чтобы заменить его на метод beginSheetModalForWindow: completeHandler:, но не могу заставить его работать. Некоторый пример кода был бы весьма полезен.Окно OS X NSAlert не будет закрыто в xCode 8 в Objective-C

(я получаю следующее консольное сообщение, когда я запускаю метод Xcode 7: 2016-10-12 15: 35: 23.537072 eBuyBooks [7886: 2192964]. [Layout] Обнаружен недостающие ограничения для этого не может быть помещен, потому что там не хватает ограничений для полного определения размера и происхождения. Добавьте недостающие ограничения или установите translatesAutoresizingMaskIntoConstraints = YES, и для вас будут созданы ограничения. Если это представление выложено вручную на macOS 10.12 и более поздних версиях, вы можете отказаться от вызова [ супер макет] от переопределения. Установить точку останова на 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];  
} 
+0

'beginSheetModalForWindow: completHandler:' является заменой 'runModal', а' runModal' не устарел. – Willeke

+0

Замена 'alertWithMessageText' находится в документации:« Вместо этого выведите и запустите объект NSAlert и установите соответствующие атрибуты ». – Willeke

ответ

0

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

// 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]; 
} 

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

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

+0

Отлично! Работал! Все еще получите эту консоль msg: 'code'2016-10-14 16: 06: 13.664282 eBuyBooks [24614: 6627678] [Layout] Обнаруженные недостающие ограничения для . Он не может быть помещен, потому что не хватает ограничений, чтобы полностью определить размер и происхождение. Добавьте недостающие ограничения или установите translatesAutoresizingMaskIntoConstraints = YES, и для вас будут созданы ограничения. Если это представление выложено вручную на macOS 10.12 и более поздних версиях, вы можете не называть [супер макет] из вашего переопределения. Установите точку останова на DETECTED_MISSING_CONSTRAINTS для отладки. Эта ошибка будет регистрироваться только один раз. – rick

+0

Тогда я бы сказал, что эта ошибка происходит откуда-то еще. Попробуйте установить точку останова на DETECTED_MISSING_CONSTRAINTS, как говорит ошибка. – Dirk

+0

Сообщение появляется, когда выполняется строка [running run modal]. В попытке выяснить, как разместить точку останова на DETECTED_MISSING_CONSTRAINTS, я увидел техническую ноту Apple: https://developer.apple.com/library/content/technotes/tn2124/_index.html. Он очень длинный и вовлеченный, и я не могу понять, как разместить точку останова. Кроме того, можно ли просто указать на окно NSAlert? Если это так, я также просмотрел документацию NSAlert о любых свойствах или методах, которые могут решить эту проблему ограничения. Я попробовал несколько, в том числе initWithFrame: NSMakeRect (...), но никто не разрешил сообщение об ошибке. – rick

Смежные вопросы