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];
}