【问题标题】:Problem: Tabbar Controller + Navigation Controller: Programmatically问题:标签栏控制器+导航控制器:以编程方式
【发布时间】:2011-09-22 14:33:42
【问题描述】:

大家好,

我试图用标签栏控制器和导航控制器制作一个应用程序。 但是我遇到了一些问题......当我尝试在我的第二个视图上 popViewController 时,应用程序崩溃了。 有人知道发生了什么吗?

我的代表:

// -- PranchetaAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.tabBarController = [[UITabBarController alloc] init];

    NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:1];

    PlayersViewController* playersViewController = [[PlayersViewController alloc] initWithTabBar];

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:playersViewController];

    [localControllersArray addObject:self.navigationController];

    [self.navigationController release];

    self.tabBarController.viewControllers = localControllersArray;
    [self.window addSubview:self.tabBarController.view];

    [self.window makeKeyAndVisible];

    [self.navigationController release];
    [localControllersArray release];

    return YES;

}

我的初见:

// -- PlayersViewsController.m

- (id)initWithTabBar {

    if (self)
    {

        self.title = @"Players";
        self.tabBarItem.image = [UIImage imageNamed:@"PlayersTabBarIcon.png"];

        CustomNavigationBarButton *addButtonView = [[CustomNavigationBarButton alloc] initWithImage:@"AddButton.png" withSelected:@"AddButtonSelected.png"];

        [addButtonView addTarget:self action:@selector(gotoCreatePlayers) forControlEvents:UIControlEventTouchUpInside];

        UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithCustomView:addButtonView];

        self.navigationItem.rightBarButtonItem = addButton;

        [addButton release];
        [addButtonView release];

    }

    return self;

}

- (void)gotoCreatePlayers {

    CreatePlayersViewController *createPlayer = [CreatePlayersViewController new];
    [self.navigationController pushViewController:createPlayer animated:YES];
    [createPlayer release];

}

当我推送第二个视图时,我会尝试返回导航。但是应用崩溃了……

指定错误:

// --  main.m
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

谢谢大家!

【问题讨论】:

    标签: iphone objective-c navigationcontroller tabbarcontroller


    【解决方案1】:

    试试这个:

    改变:

    CreatePlayersViewController *createPlayer = [CreatePlayersViewController new];
    

    到:

    CreatePlayersViewController *createPlayer = [CreatePlayersViewController alloc];
    

    如果有任何初始化方法可以调用,它应该看起来像这样

    CreatePlayersViewController *createPlayer = [[CreatePlayersViewController alloc]init];
    

    尝试这样的事情: 将此添加到 .h 文件:CreatePlayersViewController *createPlayer 然后将上面的代码替换为:

    if (createPlayer ==nil) {
        CreatePlayersViewController *nextView = [[CreatePlayersViewController alloc] initWithStyle:UITableViewStylePlain];
        self.createPlayer = nextView;
        [nextView release];
    }
    self.meetTheTeam.view.hidden = NO;
    
    
    [self.navigationController pushViewController:self.meetTheTeam animated:YES];
    

    【讨论】:

    • 不起作用...我将在我的第一个视图控制器中创建导航控制器。
    • 您的“指定错误”部分可能是“错误访问”错误。这意味着您要写入或读取您不应该在的内存区域。不过,我会再次查看代码并查看其他可能出错的地方
    • 检查我的编辑。你得到一个错误,我有一个问题是视图不会加载。这就是为什么 hidden=no 存在的原因
    • 对不起,我不明白你想让我做什么。创建 meetTheTeam 课程?我可以使用我现有的类:CreatePlayersViewController 吗?
    • 在您的 .h 文件中创建一个变量 CreatePlayersViewController *createPlayer。生病编辑上面的代码,让它看起来像你想要的那样。仅供参考,只需替换您尝试更改视图的代码(不是整个班级)
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2012-04-24
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多