2012-07-10 62 views
1


我有2个类:AppDelegate和ViewAddFriendsWindowObject。
在AppDelegate.m我有代码的这些行:NSObject内的方法的部分没有被执行

#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];不是。有任何想法吗?

回答

3

当您在代码中分配并初始化一个对象时,您将绕过您在IB中创建的任何连接。因此,在您致电isFirstRun之前,您的IBOutlet属性未设置为任何内容

+0

所以我能做些什么[_cancelSkipBtn setTitle:@“Skip”];被执行? – 2012-07-10 17:37:57

+2

您需要以某种方式从笔尖加载视图,它应该是视图控制器吗? – 2012-07-10 17:48:17

0

在您的xib中,请确保您有一个对象,其类别在身份检查器中设置为ViewAddFriendsWindowObject。从ViewAddFriendsWindowObject开始您的IBOutlet连接,然后将一个awakeFromNib方法添加到ViewAddFriendsWindowObject.m。最后,根据共享用户默认设置,将相应的isFirstRun消息发送到selfawakeFromNib。这样的事情:

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

但是,如果我使用该代码“isFirstRun”将永远是YES。 – 2012-07-10 18:37:50

+0

你原来的代码有同样的问题。我更新了我的答案来处理它。 – lottscarson 2012-07-10 19:14:10