отклонение modalViewController от проблемы UITabBarController - PullRequest
0 голосов
/ 23 сентября 2011

поэтому в моем делегате приложения я пытаюсь представить modalViewController из UITabBarController, выполнив следующие действия:

self.tabBarController = [[UITabBarController alloc] init];
LoginViewController* loginViewController = [[LoginViewController alloc] init];
        loginViewController.delegate = self;
        [self.tabBarController presentModalViewController:loginViewController animated:NO];
        [loginViewController release];

и делегат, определенный в делегате приложения:

- (void)userDidLogin:(LoginViewController *) loginViewController
{
    NSLog(@"DELEGATE CALLED, DISMISSING");
    [self.tabBarController dismissModalViewControllerAnimated:NO];
}

Вот мой LoginViewController:

protocol LoginViewControllerDelegate;

@interface LoginViewController : UIViewController <MBProgressHUDDelegate>
{


    id<LoginViewControllerDelegate> delegate;
}

@property (assign) id<LoginViewControllerDelegate> delegate;

@end


@protocol LoginViewControllerDelegate

- (void)userDidLogin:(LoginViewController *) loginViewController;

@end

Проблема в том, что этот (userDidLogin:(LoginViewController *) loginViewController) никогда не называется ... почему это? Я вызвал следующее в моей реализации LoginViewController, и это называется

[self.delegate userDidLogin:self];

UPDATE

Мне позвонил делегат. Теперь проблема в том, что когда я вызываю [self.tabBarController dismissModalViewControllerAnimated: YES], он не закрывает модальный контроллер представления.

1 Ответ

0 голосов
/ 23 сентября 2011

Вы не опубликовали какой-либо код из LoginViewController, но в коде этого класса вам необходимо добавить следующие строки, когда вы будете готовы отклонить его (возможно, когда пользователь нажимает кнопку «Вход» и вход в систему успешен).

if (delegate && [delegate respondsToSelector:@selector(userDidLogin:)])
     [delegate performSelector:@selector(userDidLogin:) withObject:self];

ОБНОВЛЕНИЕ:

Мне кажется, я понимаю, в чем здесь проблема.Согласно документации Apple, когда вы вызываете presentModalViewController: animated: метод устанавливает значение свойства "modalViewController" UIViewController (в данном случае ваш UITabBar).Однако это свойство поддерживает слабую ссылку на modalViewController.Это важно, потому что вы инициализируете LoginViewController, передаете его в presentModalViewController: animated: и затем вы отпускаете его.Так как presentModalViewController: animated: не сохраняет сильную ссылку на LoginViewController, UITTabBar не может отклонить его позже.На самом деле, я удивлен, что то, что вы сделали, не приводит к аварийному завершению EXC_BAD_ACCESS.Я предлагаю вам удалить оператор «[loginViewController release]» и вместо этого освободить его после вызова «[self.tabBarController dismissModalViewControllerAnimated: NO]"

...