Поле NSAlert не отображается - PullRequest
5 голосов
/ 14 декабря 2011

Я работаю над своим первым в истории приложением какао / Objective-C, поэтому, пожалуйста, потерпите меня, если я делаю что-то явно неправильное. У меня есть приложение, настроенное для копирования того, что находится в NSTextField в окне, в другое NSTextField (в данном случае, метку). Если пользователь ничего не ввел в текстовое поле, он должен отобразить предупреждение, но это не так. Что не так с моим кодом?

AppDelegate.m:

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize textBox1 = _textBox1;
@synthesize label1 = _label1;

- (void)dealloc
{
 [super dealloc];
}

-(IBAction)setLabelTxt: (id)sender{

    if(_textBox1.stringValue != @"")
        [_label1 setStringValue: _textBox1.stringValue];
    else{
        NSAlert* msgBox = [[[NSAlert alloc] init] autorelease];
        [msgBox setMessageText: @"You must have text in the text box."];
        [msgBox addButtonWithTitle: @"OK"];
        [msgBox runModal];
        }
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

Кроме того, есть ли руководства по методам, используемым элементами пользовательского интерфейса Какао (например, схемы именования)? Я использовал .NET стиль программирования GUI. @ Конец

Ответы [ 2 ]

10 голосов
/ 14 декабря 2011

Вот ваша проблема:

if(_textBox1.stringValue != @"")

Вы сравниваете равенство указателей, поэтому это выражение всегда возвращает true, потому что строковая константа @"" никогда не будет тем же объектом, что и строковый объект текстового поля.

Правильный способ сделать это сравнение будет:

if (![_textBox1.stringValue isEqualToString:@""])

или даже лучше:

if (_textBox1.stringValue.length > 0)

0 голосов
/ 14 декабря 2011

Вы пытались запустить оповещение модально?beginSheetModalForWindow:

[msgBox beginSheetModalForWindow:self.window
                   modalDelegate:self 
                  didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)  
                     contextInfo:nil];
...