невозможно переключиться с нескольких просмотров - PullRequest
0 голосов
/ 30 июня 2011

У меня есть простое приложение с только службами определения местоположения и 3 (почти пустыми) разными видами, и по какой-то причине я не могу перейти от вида 1 к виду 2 - приложение вылетает, и я получаю исключение.Представление 1 - это оригинальный файл .xib, два других - просто представления, которые я добавил позже.Это странно, потому что я могу переключаться между всеми ними (1-> 3, 2-> 1, 2-> 3 и т. Д.), Но не из 1-> 2.

Я использую этот код в # 1 контроллере представления m.file:

   - (IBAction) switchToMaps : (id)sender //this is the one that doesnt work
{
    MyMap *mapsView = [[MyMap alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:mapsView animated:YES];
}


- (IBAction) switchToThird : (id)sender
{
     ThirdView *third = [[ThirdView alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:third animated:YES];
}

и в качестве другого примера, вот код от 2-го контроллера представления (MyMaps.m):

- (IBAction) switchBack : (id)sender
{
LastLocationViewController *firstView = [[LastLocationViewController alloc]     initWithNibName:nil bundle:nil];
    [self presentModalViewController:firstView animated:YES];
}

- (IBAction) switchFront : (id)sender
{
    ThirdView *lastView = [[ThirdView alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:lastView animated:YES];
}

Я знаю, что это очень расплывчато, но любые идеи, чтоможет вызвать это?Я понятия не имею, как отладить это ... Я даже ставил точки останова в начале каждого метода IBAction, и когда он падает, он даже не останавливается на достигнутом .... до того, как я добавил этот код, это приложение (которое имеет только местоположение) работал совершенно нормально.

Есть идеи?Спасибо !!

Ответы [ 2 ]

1 голос
/ 30 июня 2011

, если ваше представление не загружается из какого-либо nib-файла, тогда вы должны сделать как

MyMap *mapsView = [[MyMap alloc] init];

и

ThirdView *lastView = [[ThirdView alloc] init];

и в вашем методе возврата

- (IBAction) switchBack : (id)sender
 {
 //  LastLocationViewController *firstView = [[LastLocationViewController alloc]     initWithNibName:nil bundle:nil]; // because you are allocating new memory to your last view 
  // [self presentModalViewController:firstView animated:YES];

   [self dismissModalViewControllerAnimated:YES];
}

- (IBAction) switchFront : (id)sender
{
 //  ThirdView *lastView = [[ThirdView alloc] initWithNibName:nil bundle:nil];
//  [self presentModalViewController:lastView animated:YES];

  [self dismissModalViewControllerAnimated:YES];
}
0 голосов
/ 30 июня 2011

Я догадываюсь, что вы генерируете исключение, потому что

MyMap *mapsView = [[MyMap alloc] initWithNibName:nil bundle:nil];

не может загрузить перо.Не видя вывод вашей консоли невозможно сказать наверняка.Итак, несколько вещей, которые нужно попробовать:

  • Закомментировать [self presentModalViewController:mapsView animated:YES];, посмотреть, все ли происходит сбой.

  • Явно назовите перо, которое вы ожидаетенагрузки.Загрузчик nib предполагает, что nib назван точно так же, как контроллер представления, если вы передаете nil.Поэтому, если у вас нет совпадения, вы получите исключение (например, [[MyMap alloc] initWithNibName:@"NibNameWithoutExtension" bundle:nil];)

  • Установите точку останова на [self present..., а затем наведите указатель мыши на«mapsView» после приостановки выполнения.Если всплывающее окно показывает, что mapsView равен nil, вы знаете, что ваша проблема заключается в попытке передать объект nil в -presentModalViewController:animated:.Если ваша точка останова никогда не сработает, потому что вы сначала выбрасываете исключение, ну, вот и все, проблема в том, что строка выше.

edit:

Еще одна вещь.Если у вашего пера есть кнопка, которая связана с действием, которого больше нет, это определенно доставит вам неприятности.Осмотрите каждую кнопку и убедитесь, что никакие действия не помечены желтым цветом, что указывает на несоответствие между целью кнопки и действиями, о которых она сообщает IB.Это определенно объясняет поведение точки останова, которое вы описали.

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