2011-12-14 34 views
5

Tôi đang làm việc trên ứng dụng Cacao/Objective-C đầu tiên của mình, vì vậy hãy chịu với tôi nếu tôi đang làm điều gì đó rõ ràng là không chính xác. Tôi đã cài đặt ứng dụng để sao chép mọi thứ trong một NSTextField trên cửa sổ sang một NSTextField khác (trong trường hợp này là một nhãn). Nếu người dùng đã không nhập bất cứ điều gì vào hộp văn bản, nó sẽ hiển thị một cảnh báo, nhưng nó không phải là. Có gì sai với mã của tôi?Hộp NSAlert không hiển thị

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 
} 

Ngoài ra, là có bất kỳ hướng dẫn các phương pháp được sử dụng bởi các yếu tố Cocoa UI (như đặt tên chương trình)? Tôi đã sử dụng phong cách .NET của lập trình GUI. @end

+0

Đối với câu hỏi thứ hai của bạn, Cocoa Naming/Nguyên tắc mã: http: // developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/ –

Trả lời

10

Dưới đây là vấn đề của bạn:

if(_textBox1.stringValue != @"")

Bạn đang so sánh bình đẳng con trỏ, vì vậy biểu thức này luôn trả về true vì chuỗi liên tục @"" sẽ không bao giờ cùng một đối tượng như chuỗi của trường text vật.

Cách đúng để làm so sánh này sẽ là:

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

hoặc thậm chí tốt hơn:

if (_textBox1.stringValue.length > 0)

0

Bạn đã thử chạy cảnh báo một cách bình thường chưa? beginSheetModalForWindow:

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

Nó vẫn không hiển thị. – airplaneman19

Các vấn đề liên quan