UIViewController с индексом - PullRequest
       2

UIViewController с индексом

0 голосов
/ 15 января 2012

Я использовал до этого метод:

self.viewController1 = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil andID:0];

Но я попытался использовать его снова, и он не заполняет метод с помощью идентификатора и останавливается на связке.Я пытался заполнить «andID» сам, и он не работает, как будто они удалили эту функцию или что-то в этом роде.

Есть идеи, как мне получить идентификатор в viewController?Или, может быть, другие идеи, как распознавать одни и те же классы и загружать их разными данными.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Это не стандартный UIViewController метод.Стандартный:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

.. вы, вероятно, использовали пользовательский метод, который сейчас отсутствует в вашей реализации MyViewController.

1 голос
/ 15 января 2012

Вы должны добавить этот метод в ваш MyViewController класс.

Итак, вам нужно добавить объявление метода и его относительную реализацию.

//MyViewController.h
@interface MyViewController
{
   int _controllerId;
}

@property (nonatomic, assign) int controllerId;

@end

//MyViewController.m
@implementation MyViewController

@synthesize controllerId = _controllerId;

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle andId:(int)contrId
{
   if(self = [super initWithNibName:nibName bundle:nibBundle])
   {
      self.controllerId = contrId;
   }

   return self;
}

@end

Теперь вы можете создатьэкземпляр класса MyViewController, подобный следующему.

MyViewController myController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil andID:0];
self.viewController1 = myController;
[myController release]; // if viewController1 has a retain policy

Я предлагаю не выделять init и назначать новый экземпляр свойству в той же строке.Фактически, если ваше свойство viewController1 имеет политику сохранения, вы создаете утечку памяти.В качестве альтернативы:

self.viewController1 = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil andID:0] autorelease]; // if viewController1 has a retain policy

Некоторые примечания

Поскольку initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle является публичным методом, вы можете вызывать его, не передавая идентификатор для вашего нового метода.Чтобы избежать этого, вы можете включить (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle andId:(int)contrId в качестве назначенных инициализаторов.Таким образом, вы не можете создать контроллер без идентификатора.

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