2

コードにNSTextFieldを作成しました。

.h:

@interface AppDelegate : NSObject <NSApplicationDelegate>
{
 IBOutlet NSTextField *numberOfConnectionsTextField;
}

@property (nonatomic, retain) NSTextField *numberOfConnectionsTextField;

.m:

@synthesize numberOfConnectionsTextField;

ここでフィールドの値を変更します。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

    [numberOfConnectionsTextField setStringValue:@"0"];

}

そして、値は正常に変更されます。ただし、ここで値を変更しようとすると、次のようになります。

- (void)connectionNumber:(NSString *)number {

    [numberOfConnectionsTextField setStringValue:number];
    NSRunAlertPanel(@"", number, @"", @"", @"");

}

NSTextFieldは変更されませんでした。しかし、NSRunAlertPanelは「number」文字列で正しくトリガーしました。

何か案は?私が間違ったことを見つけることができないようです...

4

2 に答える 2

0

self.numberOfConnectionsTextFieldを使用してから、変数名numberOfConnectionsTextFieldを単独で使用する方がおそらく安全です。この種のエラーは、私が最初にObjectivecを学んだときに起こりました。一部のIBOutLetは、一定期間後にゼロになりました。

強力な合成変数にはself.variablenameを使用してみてください

于 2012-11-26T04:30:15.417 に答える
0

あなたのコードはかなり良さそうです。エラーはありません。最初の理由は常にアウトレットをオブジェクトに接続しないことですが、applicationDidFinishLaunching:で変更できるため、ここでは問題になりません。

しかし、あなたは「-(void)connectionNumber:(NSString *)」について言及していませんでしたが、これは同じクラスにありますか?または、別のクラスで同じiboutletを作成して、何かを逃したことがありますか?

または、アウトレットnumberOfConnectionsTextFieldを手動で解放しましたか?nullでないか確認してください。お気に入り

if(numberOfConnectionsTextField){ 
    NSLog(@"Still exist") 
}

もう1つの理由は、どのメソッドから「-(void)connectionNumber:(NSString *)」を呼び出しているかということです。多くの場合、initからoutletのset/getを呼び出すことがあります。

あなたがすべてを正しくやっているならコメントしてください...

于 2012-11-26T04:30:29.783 に答える