从具有类级别访问权限的方法设置字符串

时间:2011-05-18 17:10:11

标签: objective-c string methods

我想做以下

+(void)DoThis
{
    [textView setString:@"qwertyasdfzxcvb."];
    [textView setNeedsDisplay:YES];
}

但是,它拒绝设置字符串。 因为这有效,

-(void)DoThis
{
    [textView setString:@"qwertyasdfzxcvb."];
    [textView setNeedsDisplay:YES];
}

我得出结论,字符串拒绝在具有类级访问权限的方法中设置。那么如何从+(void)?

中设置字符串

4 个答案:

答案 0 :(得分:2)

假设textView是一个实例变量,则无法访问它。充其量,你可以

+ (void)DoThis:(UITextView*)aTextView {
    [aTextView setString:@"qwertyasdfzxcvb."];
    [aTextView setNeedsDisplay:YES];
}

答案 1 :(得分:2)

您最有可能尝试的是从类方法设置实例变量。这不起作用,因为类对象不是类的实例,因此无法访问实例变量。所以你的方法     +(无效)DoThis 无法访问textView 实例变量,因为类对象不是该类的实例

答案 2 :(得分:2)

您无法从类方法设置实例变量。如果要声明“类变量”,则必须在类的.m文件中创建static global variable,因为Objective-C中没有类变量。这是一个C静态变量,不是Java或C#意义上的考虑。这里,“static”确保变量不能在该文件之外使用。

答案 3 :(得分:1)

我认为您可能正在寻找的是单例/共享模式,它允许任何代码访问类的特定实例而不传递该实例。

这个模型在整个Cocoa中使用。例如,NSFileManager有一个类方法defaultManager,它返回类的共享实例。首先通过调用defaultManager来调用此共享实例上的实例方法,例如调用您编写的实例方法isDeletableFileAtPath

[[NSFileManager defaultManager] isDeletableFileAtPath:path]

在您的情况下,DoThis成为:

+ (void) DoThis
{
    EvDudeClass *shared = [EvDudeClass sharedInstance];
    [shared.textView setString:@"qwertyasdfzxcvb."];
    [shared.textView setNeedsDisplay:YES];
}

您需要在班级中添加sharedInstance方法。根据您希望如何使用您的课程,有很多方法可以做到这一点 - 这是一个单身人士吗?您只需要一个共享实例和其他非共享实例吗?您是否只想共享在NIB中创建的实例?正如你所提到的IBOutlet这里有一个实现后者的实现:

static EvDudeClass *privateSharedInstance = nil;

- (void) awakeFromNib
{
    privateSharedInstance = self; // save this instance so it can be shared
    // other init stuff
}

+ (EvDueClass *)sharedInstance { return privateSharedInstance; }