我有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];
未执行。有什么想法吗?
答案 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];
}