我在Xcode 4.3中创建了一个新项目“ Empty Application”模板,它只有两个类AppDelegate.h和.m

我在创建应用程序时使用ARC进行了检查,以使用自动引用计数。

我添加了两个新文件“ RootViewController”和“ NewProjectViewControllers”。

我在AppDelegate中实现了如下代码来设置导航控制器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
      // Override point for customization after application launch.

      rootViewController = [[MainViewController alloc] init];
      UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:rootViewController];
      [self.window addSubview:navigation.view];

      self.window.backgroundColor = [UIColor whiteColor];
      [self.window makeKeyAndVisible];
      return YES;
}


并在主视图中(根视图控制器)实现如下

- (void)viewDidLoad
{
      [super viewDidLoad];

      self.title = @"Projects";
      UINavigationBar *navigationBar = [self.navigationController navigationBar];
      [navigationBar setTintColor:   [UIColor colorWithRed:10/255.0f green:21/255.0f blue:51/255.0f alpha:1.0f]];

      //To set the customised bar item
      UIButton *rightBarBtn = [UIButton buttonWithType:UIButtonTypeCustom];
      [rightBarBtn setBackgroundImage:[UIImage imageNamed:@"plus_new.png"] forState:UIControlStateNormal];
      rightBarBtn.frame=CGRectMake(0.0, 100.0, 30.0, 30.0);
      [rightBarBtn addTarget:self action:@selector(addProject)  forControlEvents:UIControlEventTouchUpInside];

      UIBarButtonItem* rightBarItem = [[UIBarButtonItem alloc] initWithCustomView:rightBarBtn];
      self.navigationItem.rightBarButtonItem = rightBarItem;

      // Do any additional setup after loading the view from its nib.
}

- (void) addProject
{
      NewProjViewController *editProject = [[NewProjViewController alloc] init];
      [self.navigationController pushViewController:editProject animated:YES];

      NSLog(@"xxxxxxxxxxxxxxx");
}


但是,由于我使用了ARC,导航可能会立即脱发,并且无法正常工作,方法中的所有操作都可以正常工作,只是推送到下一个视图

如果我用ARC做同样的事情,那就可以了

如何解决这个问题..?提前致谢

最佳答案

appdelegate appdidfinishlaunching方法中,您尚未设置

self.window.rootviewcontrollernavigationController。实际上,您没有将任何rootViewController设置为Window。这就是为什么不显示它。在开始在屏幕上查看ViewController之前,请进行设置。



UIWindow rootViewController属性是iOS4的新增功能。

较老的技术是使用addSubview

推荐的新技术是设置rootViewController

关于iphone - UINavigationController在iPhone中的ARC下不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13945746/

10-12 00:36
查看更多