1

私はグーグルで検索していくつかの答えを見つけましたが、どれも機能しませんでした。クラス「A」のある1つのNSObjectと、NSObjectのない2番目のクラス「B」があります。クラス「A」には私のIBOutletsが定義されており、クラス「B」からこれらのアウトレットにアクセスする方法がわからないようです...

http://forums.macrumors.com/archive/index.php/t-662717.htmlのような回答済みの質問を見つけましたが、混乱を招きます。

どんな助けでも大歓迎です!

コードの簡略化されたバージョン:

aClass.h:

#import <Cocoa/Cocoa.h>

@interface aClass : NSObject {
    IBOutlet NSTextField *textField;
}
@end


aClass.m:

#import "aClass.h"

@implementation aClass
// Code doesn't matter
@end


bClass.h:

#import <Cocoa/Cocoa.h>

@interface bClass : NSObject {
}
@end


bClass.m:

#import "aClass.h"
#import "bClass.h"

@implementation bClass
    [textField setStringValue: @"foo"];
@end
4

2 に答える 2

2

あなたが書くとき:

クラス「A」のある1つのNSObjectと、NSObjectのない2番目のクラス「B」があります。

それはあなたが基本的な概念に頭を悩ませていないことを私に教えてくれます。AppleのObjective-Cの紹介とチュートリアルプロジェクトを読んでください。

于 2009-12-20T16:25:33.940 に答える
1

解決策はNSNotificationCenterを使用しています。これを行う方法を説明するスレッドは次のとおりです。Objective-CのNSNotificationCenterを介してメッセージを送受信しますか?

次に、通知に反応するメソッドで、アウトレットにアクセスするメソッドを呼び出します

- (void) receiveTestNotification:(NSNotification *) notification
{

    if ([[notification name] isEqualToString:@"TestNotification"])
        //NSLog (@"Successfully received the test notification!");
        [self performSelectorOnMainThread:@selector(doIt:) withObject:nil waitUntilDone:false];
}
- (void) doIt
{
    //testLabel.text = @"muhaha";
}

これは私にとってはうまくいきました、あなたにもそうなることを願っています。

于 2011-08-19T09:48:15.063 に答える