Objective-C: Помощь - мой xib не показывает? - PullRequest
1 голос
/ 16 сентября 2011

У меня есть следующий код Objective C:

MainMenu *main= [[MainMenu alloc] initWithNibName:nil bundle:nil];
[[self navigationController]pushViewController:main animated:YES];
NSLog(@"hello");

У меня есть класс с именем MainMenu с соответствующим заголовочным файлом и файлом xib.Неважно, что я делаю, это просто не покажет.Я подтвердил, что код подходит к вышесказанному из-за NSLog ('привет').

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

Я надеюсь, что кто-то может помочь,


Редактировать - все еще возникают проблемы ...

Вот несколько скриншотов моей настройки проекта:

Project topology

MainMenu.xib

PrestoCab11ViewController.xib

MainMenu.xib


Хорошо, поэтому я попробовал это:

MainMenu *main= [[MainMenu alloc] initWithNibName:nil bundle:nil];
[[self navigationController]pushViewController:main animated:YES];
[self.view addSubview:main.view];

Но все равно не работает ...

Заранее большое спасибо,

Ответы [ 5 ]

1 голос
/ 16 сентября 2011

Полагаю, проблема в том, что у вас не настроен контроллер навигации. Попробуйте представить контроллер вида с помощью

[self presentModalViewController:main animated:YES];
1 голос
/ 16 сентября 2011

Почему вы устанавливаете nibName на nil?Если имя пера MainMenu, то вам нужно:

MainMenu *main= [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
[self.navigationController pushViewController:main animated:YES];
[main release];

Вы уверены, что у вас есть UINavigationController для того, чтобы выдвинуть новый вид?Помогает!

1 голос
/ 16 сентября 2011

Тот факт, что initWithNibName равен nil, не должен быть проблемой, потому что если ему дано значение nil, он ищет nib с точным именем класса.

Две вещи:

1) Убедитесь, что вы недавно запустили чистку и убедитесь, что файл загружается правильно.

2) Убедитесь, что навигационный контроллер не равен нулю,если это так, то вам необходимо убедиться, что вы создали контроллер навигации, если вы не собираетесь использовать контроллер навигации, рассмотрите возможность использования:

- (void)presentModalViewController:(UIViewController *)modalViewController 
                          animated:(BOOL)animated
1 голос
/ 16 сентября 2011

Не дергайте себя за волосы, просто внимательно посмотрите на свой код: в вашем initWithNibName есть ноль.Что такое MainMenu это viewController или что?и поместите правильное перо, чтобы получить Hello.

Обновлено в соответствии с запросом:

MainMenu *main= (MainMenu *)[MainMenu alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:main];
[self.navigationController presentModalViewController:nav animated:YES];
NSLog(@"hello");
0 голосов
/ 21 сентября 2011

Убедитесь, что владельцем объекта является MainMenu, а представление подключено.

В NIB MainMenu выберите «Владелец файла» и нажмите «Инспектор идентификации».Класс должен соответствовать вашему имени класса VC.

Затем выберите основной вид в вашей NIB и нажмите на Инспектора соединений.Розетка просмотра должна быть подключена к владельцу вашего файла.

Если они оба установлены правильно, то опубликуйте еще немного окружающего кода.Заметная точка, если они оба установлены,

MainMenu * main= [[MainMenu alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:main animated:YES];

загрузит правильный NIB и отобразит его.

Что вы видите ?Другой момент, если MainMenu является подклассом некоторого другого VC с NIB, вам придется изменить базовый класс 'init', чтобы переопределить поведение по умолчанию, например:

    self = [super initWithNibName:nibNameOrNil == nil ? @"BaseViewController" : nibNameOrNil bundle:nibBundleOrNil]

Но в этом случае вам придетсяопределите NIB, который будет переопределять контроллеры базового представления.

Опубликуйте больше кода и сообщите нам, что вы видите при запуске.

...