Цель C - статические переменные в категориях - PullRequest
4 голосов
/ 22 декабря 2011

У меня есть небольшая проблема. Поскольку все мои UIViewControlles названы в одной схеме:

MyView1Controller.h MyView1Controller.m MyView1.xib

MyView2Controller.h MyView2Controller.m MyView2.xib

MyView3Controller.h MyView3Controller.m MyView3.xib

Теперь я бы предпочел инициализировать свои UIViewControllers с помощью заводского метода. Поэтому я бы реализовал Cateogry на UIViewController:

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

Init:

MyView1Controller *a = [MyView1Controller standardViewController];

Но статическая переменная всегда равна нулю.

Есть предложения по решению этой проблемы?

Буду признателен за любую помощь!

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Вы можете объявить метод + вместо UIViewController класса и переопределить для реализующих классов

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

Редактировать: Если реализующий класс имеет то же nibName, что и базовый, вам не нужно переопределять функцию.

0 голосов
/ 22 декабря 2011

У вас есть статическая NSString * standardNibFileName; в файле .h, попробуйте удалить его, я надеюсь статическая NSString * standardNibFileName = @ "MyView1"; .m более чем достаточно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...