2011-12-14 12 views
5

Estoy trabajando en mi primera aplicación de cacao/Objective-C, así que por favor tengan paciencia si estoy haciendo algo obviamente incorrecto. Tengo la aplicación configurada para copiar lo que está en un NSTextField en la ventana a otro NSTextField (en este caso, una etiqueta). Si el usuario no ha ingresado nada en el cuadro de texto, debería mostrar una alerta, pero no lo está. ¿Qué pasa con mi código?El cuadro de NSAlert no aparece

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 
} 

Además, ¿hay guías de métodos utilizados por los elementos de interfaz de usuario Cocoa (como esquemas de nomenclatura)? Me utilizan el estilo .NET de la programación de GUI. @end

+0

a su segunda pregunta, cacao Naming/Codificación de Normas: http: // developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/ –

Respuesta

10

Aquí es su problema:

if(_textBox1.stringValue != @"")

Usted está comparando la igualdad puntero, por lo que esta expresión devuelve siempre true debido a que la cadena constante @"" nunca será el mismo objeto como cadena del campo de texto objeto.

La forma correcta de hacer esta comparación sería:

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

o incluso mejor:

if (_textBox1.stringValue.length > 0)

0

¿Ha intentado ejecutar la alerta de forma modal? beginSheetModalForWindow:

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

Todavía no se muestra. – airplaneman19