Objective c NSObject中未执行的部分方法

Objective c NSObject中未执行的部分方法,objective-c,xcode,macos,cocoa,nsobject,Objective C,Xcode,Macos,Cocoa,Nsobject,我有两个类:AppDelegate和ViewAddFriendswindObject。 在AppDelegate.m中,我有以下代码行: #import "ViewAddFriendsWindowObject.h" - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { ViewAddFriendsWindowObject *viewAddFriends = [[ViewAddFriendsWind


我有两个类:AppDelegate和ViewAddFriendswindObject。
在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

问题出在这里<代码>执行NSLog(@“是”),但
[\u cancelSkipBtn setTitle:@“Skip”]
[\u cancelSkipBtn setEnabled:NO]不是。有什么想法吗?

当您在代码中alloc和init一个对象时,您绕过了在IB中建立的任何连接。因此,在您在xib中对其调用
isFirstRun
之前,您的IBOutlet属性没有设置为任何值,确保在标识检查器中有一个类设置为
ViewAddFriendsWindowObject
的对象。从
ViewAddFriendsWindowObject
建立IBOutlet连接,然后将
awakeFromNib
方法添加到ViewAddFriendsWindowObject.m。最后,根据共享用户默认值中的设置,将相应的
isFirstRun
消息发送到
awakeFromNib
中的
self
。大概是这样的:

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

那么,我该如何处理[_cancelskipbtnsettitle:@“Skip”];被执行?您需要从nib加载视图,它应该是视图控制器吗?您的原始代码也有同样的问题。我更新了我的答案来处理它。
- (void)awakeFromNib
{
   if (![[NSUserDefaults standardUserDefaults] boolForKey:@"PreviouslyRun"]) {
      [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PreviouslyRun"];
      [[NSUserDefaults standardUserDefaults] synchronize];
      [self isFirstRun:YES];
   } 
   else
      [self isFirstRun:NO];
}