目标c访问公共方法

时间:2012-12-21 12:42:49

标签: objective-c cocoa nstextfield public-method

我尝试从另一个类访问公共方法。我已经尝试了很多我在网络上找到的例子,但它们并没有按照我希望的方式工作。

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"];

}

非常奇怪的是,在NSLogs中,一切都很好,在两个NSLog中,字符串都是“Test”,但textField的stringValue不会改变!

4 个答案:

答案 0 :(得分:10)

-+并不代表公共或私人

-代表可以调用类对象和

的方法

+代表可以在类本身上调用的方法。

答案 1 :(得分:7)

以下是您可以做的简短示例:


自定义类

@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];,这是一个公共对象方法。

答案 2 :(得分:0)

您正尝试使用类方法访问实例变量。您应该将+setLabel:方法转换为-setLabel:,并将其称为:

[_myClass1Variable setLabel:@"Test"];

此外,-setStringValue是什么?如果您只是想更改UILabel的文字,则需要致电-setText:

答案 3 :(得分:0)

我猜label将是一个NSTextField,并且你想要设置它的值而不加载那个XIB,导致你的awakeFromNib没有被调用。并且出口不受label的限制。