我想做以下
+(void)DoThis
{
[textView setString:@"qwertyasdfzxcvb."];
[textView setNeedsDisplay:YES];
}
但是,它拒绝设置字符串。 因为这有效,
-(void)DoThis
{
[textView setString:@"qwertyasdfzxcvb."];
[textView setNeedsDisplay:YES];
}
我得出结论,字符串拒绝在具有类级访问权限的方法中设置。那么如何从+(void)?
中设置字符串答案 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; }