代码之家  ›  专栏  ›  技术社区  ›  Romain Piel

我不知道为什么我的观点是冻结

  •  1
  • Romain Piel  · 技术社区  · 16 年前

    我有一个大问题,因为几天以来,我不能解决。

    首先,我有一个登录视图控制器,代码如下:

    @implementation MMConnectionViewController
    @synthesize login, password, activityIndicator, mainVC;
    
    
    - (BOOL)textFieldShouldReturn:(UITextField *)aTextField 
    {
     [aTextField resignFirstResponder];
    
     [self performSelectorOnMainThread:@selector(startRolling) withObject:nil waitUntilDone:NO];
    
     [NSThread detachNewThreadSelector:@selector(connect) toTarget:self withObject:nil];
    
     return YES;
    }
    
    
    - (void)viewWillAppear:(BOOL)flag {
        [super viewWillAppear:flag];
        [login becomeFirstResponder];
     login.keyboardAppearance = UIKeyboardAppearanceAlert;
     password.keyboardAppearance = UIKeyboardAppearanceAlert;
     [self setTitle:@"Monaco Marine"];
     UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Logout"
                        style:UIBarButtonItemStyleBordered
                       target:nil
                       action:nil];
     self.navigationItem.backBarButtonItem = backBarButtonItem;
     [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackOpaque];
     [backBarButtonItem release];
    }
    
    - (void)connect {
    
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
     mainVC = [[MMMainViewController alloc] initWithLogin:login.text password:password.text connectPass:@"1" navigationController:self.navigationController nibName:@"MMMainViewController" bundle:nil];
    
    
     if (mainVC) {
      [self performSelectorOnMainThread:@selector(dataLoadingFinished) withObject:nil waitUntilDone:YES];
     }
    
     [pool release];
    }
    
    - (void)dataLoadingFinished {
     self.stopRolling;
     [self.navigationController pushViewController:mainVC animated:YES];
    }
    
    - (void)showAlertWithMessage:(NSString *)message {
     self.stopRolling;
     NSLog(@"%@",message);
     UIAlertView *warning = [[UIAlertView alloc] initWithTitle:@"Connection Failed" message:[NSString stringWithFormat:@"%@",message] delegate:self cancelButtonTitle:@"Retry" otherButtonTitles:nil];
     [warning show];
     [warning release];
    }
    
    - (void)startRolling {
     [activityIndicator startAnimating];
    }
    
    - (void)stopRolling {
     [activityIndicator stopAnimating];
    }
    
    
    - (void)viewDidLoad {
     [login becomeFirstResponder];
    }
    
    - (void)dealloc {
     [login release],login=nil;
     [password release],password=nil;
     [activityIndicator release],activityIndicator=nil;
        [super dealloc];
    }
    

    之后,将出现MMMainViewController,代码如下:

    @implementation MMMainViewController
    @synthesize login, password, connectPass, navigationController, accountVC;
    
    
    - (void)viewDidLoad {
    
     // Set a title for each view controller. These will also be names of each tab
     accountVC.title = @"Account";
    
     accountVC.tabBarItem.image = [UIImage imageNamed:@"icon_user.png"];
    
     self.view.frame = CGRectMake(0, 0, 320, 480);
    
     // Set each tab to show an appropriate view controller
     [self setViewControllers:
      [NSArray arrayWithObjects:accountVC, nil]];
    
     [navigationController setNavigationBarHidden:NO animated:NO];
    
     UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Menu"
                       style:UIBarButtonItemStyleBordered
                      target:nil
                      action:nil];
     self.navigationItem.backBarButtonItem = backButton;
    
     [backButton release];
    
    
     [self setTitle:@"Menu"];
    
    }
    
    
    
    // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    - (id)initWithLogin:(NSString *)l password:(NSString *)p connectPass:(NSString *)c navigationController:(UINavigationController *)navController nibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    
     UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
     contentView.backgroundColor = [UIColor whiteColor];
     self.view = contentView;
     [contentView release];
    
     login = l;
     password = p;
     connectPass = c;
     navigationController = navController;
    
     if (!accountVC)
      accountVC = [MMAccountViewController alloc];
    
     [self.accountVC
      initWithNibName:@"MMAccountViewController" bundle:nil];
    
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
     return self;
    
    
    }
    
    - (void)dealloc {
     [connectPass release];
     [login release];
     [password release];
        [super dealloc];
    }
    


    现在的问题是,有时当加载我的选项卡式视图控制器并返回到登录视图控制器时,屏幕会冻结并出现错误消息(NSZombieEnabled=YES):

    *** -[CALayer retain]: message sent to deallocated instance 0xd0199d0
    

    谢谢那些帮助我的人!

    2 回复  |  直到 16 年前
        1
  •  5
  •   Nick    16 年前

    更新:

        2
  •  0
  •   Akbar Khan    15 年前