NSObject内部的方法部分未被执行

时间:2012-07-10 17:28:33

标签: objective-c xcode macos cocoa nsobject


我有2个类:AppDelegate和ViewAddFriendsWindowObject 在AppDelegate.m中,我有以下几行代码:

#import "ViewAddFriendsWindowObject.h"

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    ViewAddFriendsWindowObject *viewAddFriends = [[ViewAddFriendsWindowObject alloc] init];
    [viewAddFriends isFirstRun:YES];
}

在ViewAddFriendsWindowObject.h中我有:

#import <Foundation/Foundation.h>

@interface ViewAddFriendsWindowObject : NSObject 

@property IBOutlet NSButton *cancelSkipBtn;
@property IBOutlet NSButton *doneBtn;

- (void)isFirstRun:(BOOL)firstRun;

@end

在ViewAddFriendsWindowObject.m中我有:

    #import "ViewAddFriendsWindowObject.h"

    @implementation ViewAddFriendsWindowObject
    @synthesize cancelSkipBtn=_cancelSkipBtn;
    @synthesize doneBtn=_doneBtn;

    - (void)isFirstRun:(BOOL)firstRun{

        NSLog(firstRun ? @"Yes" : @"No");

        if(firstRun == YES){
            NSLog(@"YES");
            [_cancelSkipBtn setTitle:@"Skip"];
            [_cancelSkipBtn setEnabled:NO];
        }else{
            NSLog(@"NO");
            [_cancelSkipBtn setTitle:@"Cancel"];
        }

    }
@end

这是问题所在。 The NSLog(@"YES")已执行,但[_cancelSkipBtn setTitle:@"Skip"];[_cancelSkipBtn setEnabled:NO];未执行。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

在代码中分配和初始化对象时,您绕过了在IB中建立的任何连接。因此,在您调用isFirstRun之前,您的IBOutlet属性未设置为任何内容

答案 1 :(得分:0)

在xib中,确保在身份检查器中有一个类设置为ViewAddFriendsWindowObject的对象。从ViewAddFriendsWindowObject创建IBOutlet连接,然后向ViewAddFriendsWindowObject.m添加awakeFromNib方法。最后,根据共享用户默认设置中的设置,将isFirstRun消息发送到self中的awakeFromNib。像这样:

- (void)awakeFromNib
{
   if (![[NSUserDefaults standardUserDefaults] boolForKey:@"PreviouslyRun"]) {
      [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PreviouslyRun"];
      [[NSUserDefaults standardUserDefaults] synchronize];
      [self isFirstRun:YES];
   } 
   else
      [self isFirstRun:NO];
}