1


AppDelegate と ViewAddFriendsWindowObject の 2 つのクラスがあります。
AppDelegate.mi には、次のコード行があります。

#import "ViewAddFriendsWindowObject.h"

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

ViewAddFriendsWindowObject.hi には次のものがあります。

#import <Foundation/Foundation.h>

@interface ViewAddFriendsWindowObject : NSObject 

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

- (void)isFirstRun:(BOOL)firstRun;

@end

ViewAddFriendsWindowObject.mi には次のものがあります。

    #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];ん。何か案は?

4

2 に答える 2

3

コードでオブジェクトを割り当てて初期化すると、IB で行ったすべての接続がバイパスされます。したがって、IBOutlet プロパティは、呼び出す前に何にも設定されていませんisFirstRun

于 2012-07-10T17:33:03.510 に答える
0

xibViewAddFriendsWindowObjectで、ID インスペクターでクラスが設定されたオブジェクトがあることを確認します。から IBOutlet 接続を作成し、メソッドを ViewAddFriendsWindowObject.mViewAddFriendsWindowObjectに追加します。awakeFromNib最後に、共有ユーザーのデフォルトの設定に基づいて、適切な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];
}
于 2012-07-10T18:12:16.757 に答える