ios ios5 exc_bad_access с навигационным контроллером (базовый) - PullRequest
0 голосов
/ 29 декабря 2011

Я создаю базовое приложение для навигации и вижу ошибку exc_bad_access. Может кто-нибудь, пожалуйста, укажите мне, что не так? У меня есть только 2 экрана, и вот код, который я использую:

в AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

  UINavigationController *navcon = [[UINavigationController alloc]init];
  psLaunchVC* pvc = [[psLaunchVC alloc]init];
  [navcon pushViewController:pvc animated:NO];

  [self.window addSubview:navcon.view];
    [self.window makeKeyAndVisible];
    return YES;
}

psLaunchVC отлично подходит в качестве первого экрана. Я пытаюсь запустить psTipVC из psLaunchVC.

psLaunchVC имеет действие, объявленное в .h как

-(IBAction)showTip:(id)sender;

и реализовано в .m как

- (IBAction) showTip:(id)sender
{
  // psTipVC *pst = [[psTipVC alloc]init];

  psTipVC *pst = [[psTipVC alloc]initWithNibName:@"psTipVC" bundle:nil];

  [self.navigationController pushViewController:pst animated:YES];

}

ShowTip подключен в IB как действие для touchUpInside. Тем не менее, когда этот код выполняется, я вижу ошибку exc_bad_access. Может ли кто-нибудь помочь мне, что здесь не так? является ли self.navigationController правильным способом доступа к контроллеру навигации?

Объявления для справки:

@interface psLaunchVC : UIViewController 
@interface psTipVC : UIViewController

Фактическое сообщение об ошибке:

2011-12-29 00:03:13.739 passport[633:707] -[__NSCFString showTip:]: 
     unrecognized selector sent to instance 0x18f5e0
2011-12-29 00:03:13.748 passport[633:707] 
          *** Terminating app due to uncaught exception 
          'NSInvalidArgumentException', 
          reason: '-[__NSCFString showTip:]: 
          unrecognized selector sent to instance 0x18f5e0'

1 Ответ

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

Получаемое сообщение выглядит так, как будто psLaunchVC выпущено, а выход указывает на мусор.Возможно, вы компилируете это с включенной ARC?Если это так, ваш контроллер навигации, скорее всего, выйдет из-под вас, когда application: didFinishLaunchingWithOptions: возвращается, поскольку он никем не сохраняется.Попробуйте переработать этот метод, чтобы он выглядел следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

  psLaunchVC* pvc = [[psLaunchVC alloc]init];
  UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:pvc];

  self.window.rootViewController = navcon;
  [self.window makeKeyAndVisible];
  return YES;
}

UIWindow действительно хочет rootViewController, а не только отображаемое представление.Кроме того, initWithNibName: bundle: является назначенным инициализатором для UIViewControllers, psLaunchVC действительно должен быть инициализирован вместо этого.

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