9

別のクラスからパブリック メソッドにアクセスしようとしています。Web で見つけた多くの例を既に試しましたが、思ったようには機能しませんでした。

Class1.h

@interface anything : NSObject {

    IBOutlet NSTextField *label;

}

+ (void) setLabel:(NSString *)string;
- (void) changeLabel:(NSString *)string2;

Class1.m

+ (void) setLabel:(NSString *)string {

    Class1 *myClass1 = [[Class1 alloc] init];

    [myClass1 changeLabel:string];
    NSLog(@"setLabel called with string: %@", string);

}

- (void) changeLabel:(NSString *)string2 {

    [label setStringValue:string2];
    NSLog(@"changeLabel called with string: %@", string2);
}

Class2.m

- (IBAction)buttonPressed {

    [Class1 setLabel:@"Test"];

}

非常に奇妙なのは、NSLog ではすべて問題なく、両方の NSLog で文字列が「Test」であるのに、textField の stringValue が変化しないことです。

4

4 に答える 4

14

-パブリックまたはプライベートを意味するものではあり+ません

-クラスのオブジェクトで呼び出すことができるメソッドを表し、

+クラス自体で呼び出すことができるメソッドを表します。

于 2012-12-21T12:52:26.417 に答える
8

ここにあなたができることの短い例があります:


カスタムクラス

@interface ITYourCustomClass : NSObject
@property (strong) NSString *title;

- (void)doSomethingWithTheTitle;
@end

@implementation ITYourCustomClass
- (void)doSomethingWithTheTitle {
    NSLog(@"Here's my title: %@", self.title);
}
@end

それを使用する

@implementation ITAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    ITYourCustomClass *objectOfYourCustomClass = [[ITYourCustomClass alloc] init];
    [objectOfYourCustomClass doSomethingWithTheTitle];
}

@end

クラスとオブジェクトのメソッド

+を使用してメソッドを宣言すると、クラスで直接メソッドを呼び出すことができます。あなたがそれをしたように[myClass1 setLabel:@"something"];。これは意味がありません。必要なのは、プロパティを作成することです。プロパティはオブジェクトに保存されるため、オブジェクトを作成しITYourCustomClass *objectOfYourCustomClass = [[ITYourCustomClass alloc] init];てプロパティを設定できますobjectOfYourCustomClass.title = @"something"[objectOfYourCustomClass doSomethingWithTheTitle];次に、パブリックオブジェクトメソッドであるを呼び出すことができます。

于 2012-12-21T12:54:17.290 に答える
0

labelは NSTextField だと思いますが、その XIB をロードせずにその値を設定しようとしているため、awakeFromNib が呼び出されません。そして、アウトレットはそのことに縛られることはありませんlabel

于 2012-12-21T12:52:27.870 に答える
0

クラスメソッドでインスタンス変数にアクセスしようとしています。+setLabel:メソッドをに変換し、次の-setLabel:ように呼び出す必要があります。

[_myClass1Variable setLabel:@"Test"];

さらに、何-setStringValueですか?のテキストを変更しようとしているだけの場合は、UILabelを呼び出す必要があります-setText:

于 2012-12-21T12:50:11.193 に答える