Поле NSAlert не отображается

Я работаю над своим первым приложением на какао / 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 для программирования с графическим интерфейсом пользователя. @конец


person airplaneman19    schedule 14.12.2011    source источник
comment
Что касается вашего второго вопроса, Руководство по именованию / кодированию какао: developer.apple. com / library / mac / documentation / Cocoa / Conceptual /   -  person jscs    schedule 14.12.2011


Ответы (2)


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

if(_textBox1.stringValue != @"")

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

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

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

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

if (_textBox1.stringValue.length > 0)

person Francis McGrew    schedule 14.12.2011

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

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