Инициируйте ViewController со значением - PullRequest
0 голосов
/ 21 августа 2011

Я только что создал новый контроллер просмотра для своего приложения для iphone.

Контроллер просмотра запускается, когда пользователь нажимает на кнопку.Назначенный инициализатор для контроллера представления является значением по умолчанию (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil.

Я бы назвал инициализатор типа initWithID:(NSInteger)id, но как вызвать назначенный инициализатор?

Ответы [ 4 ]

5 голосов
/ 21 августа 2011

Мне не нравится переносимость, обеспечиваемая созданием контроллера представления с использованием

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

Так что я все равно часто использую его только внутренне, но это может выглядеть примерно так

- (id)initWithId:(NSString *)identification
{
    self = [super initWithNibName:@"nibName" bundle:nil];
    if (self) {
        _identification = identification;
    }
    return self;
}

Обратите внимание, что вы не должны использовать id в качестве имени, поскольку оно является типом и, следовательно, сбивает с толку

Если контроллер представления A создает контроллер представления B Мне нравится думать, что если мой код достаточно слабо связан, тогда B должен иметь лучшее представление, чем A, относительно того, что nib B должен загрузить .

1 голос
/ 21 августа 2011

Создайте метод в файле .h с именем:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ID:(NSInteger)idNumber;

А затем в файле .m реализуйте метод следующим образом:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ID:(NSInteger)idNumber; {
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if(self != nil){
    // use the idNumber here!
  }
  return self;
}

Редактировать: Я использовал id для NSInteger, как он использовал его в своем вопросе.Я изменил его на idNumber сейчас, так как людям это не нравится.

Надеюсь, это поможет!

0 голосов
/ 21 августа 2011

Стандартный способ сделать это - использовать свойство (по крайней мере, так это делается в большинстве примеров кода Apple).

In .h:

@interface MyViewController {
    NSInteger viewID;
}

@property (assign) NSInteger viewID;
@end

In .m:

@synthesize viewID;

В контроллере вида, который его выдвигает:

MyViewController *controller = [[MyViewController alloc] init];
controller.viewID = integerValue;
// and push the view controller

BTW, если имя пера совпадает с именем класса, только alloc-init будет иметь тот же эффект.

0 голосов
/ 21 августа 2011

Вы можете сделать это так:

.h файл

-(id)initWithID:(NSInteger)id;

.m файл

-(id)initWithID:(NSInteger)id{

   self = [super initWithNibName:@"nib name" bundle:nil];
   if(self){
       //do what you want with the id
   }

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