Objective C - 类别中的静态变量

时间:2011-12-22 14:00:42

标签: iphone objective-c properties ios5 categories

我确实有一点问题。 由于我的UIViewControlles都以相同的方案命名:

MyView1Controller.h MyView1Controller.m MyView1.xib

MyView2Controller.h MyView2Controller.m MyView2.xib

MyView3Controller.h MyView3Controller.m MyView3.xib

我现在更喜欢通过工厂方法初始化我的UIViewControllers。 因此,我将在UIViewController上实现一个Cateogry:

static NSString *standardNibFileName;

@interface UIViewController (FactoryInstantiation)

+ (id) standardViewController;

@end

在MyView1Controller控制器中,我将声明静态nib文件名变量:

static NSString *standardNibFileName = @"MyView1";

@implementation MyView1Controller

然后我可以使用以下方法实例化所有的UIViewCOntrollers:

@implementation UIViewController (FactoryInstantiation)

+ (id) standardViewController;
{
    if(standardNibFileName != nil) {

        NSString *className = NSStringFromClass([self class]);
        Class classToIntantiate = NSClassFromString(className);
        return [[classToIntantiate alloc] initWithNibName:className bundle:nil];
    }

return nil;
}

@end

初​​始化:

MyView1Controller *a = [MyView1Controller standardViewController];

但静态变量总是为零。

有关如何解决此问题的任何建议?

我将不胜感激任何帮助!

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以在UIViewController类上声明一个+方法,并覆盖实现类

+ (NSString*) getStandardNibFileName {
    return @"nibName"
}

编辑:如果实现类具有与基础相同的nibName,则不必覆盖该函数。

答案 1 :(得分:0)

你有静态NSString * standardNibFileName;在.h文件中,我希望尝试删除它 static NSString * standardNibFileName = @“MyView1”; .m绰绰有余