【问题标题】:Navigation to another view in iphone导航到 iphone 中的另一个视图
【发布时间】:2011-01-04 15:43:20
【问题描述】:

这是我的代码,我正在尝试从一个视图转到另一个视图而没有任何内存泄漏。

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


    firstviewcontroller *first = [[firstviewcontroller alloc] init];
    [window addSubview:first.view];
    [self.window makeKeyAndVisible];

    return YES;
}

-(IBAction)gotosecondview:(id)sender
{ 
    secondviewcontroller *second = [[secondviewcontroller alloc] init];
    [self.view addSubview:second.view];
    [second release];
}

-(IBAction)gotofirstview:(id)sender
{
    [self.view  removeFromSuperview];
}

要使上述代码在不崩溃的情况下工作,我所要做的就是删除[second release]。 如果我删除它,我会得到内存错误(构建和分析)。我怎么解决这个问题。我不想使用[self.navigationController pushViewController:second animated:YES]; 我要做的就是在不使用导航控制器的情况下从一个视图导航到另一个视图,反之亦然。我的 firstviewcontroller 和 secondviewcontroller 的类型是 UIViewController

提前致谢。

【问题讨论】:

    标签: iphone cocoa-touch navigation


    【解决方案1】:

    您需要在其视图显示时保持当前视图控制器处于活动状态(以便它可以处理用户输入等)。

    在您的代码中,您可以通过多种方式实现:

    • 保留firstviewcontrollersecondviewcontroller 的实例作为实例变量,并在dealloc 方法上释放它们。
    • 使用当前使用的UIViewController 保留一个实例变量,并在切换到另一个视图时释放它。

    第二个选项的代码如下所示:

    @interface
        UIViewController *currentViewController;
    @end
    
    @implementation
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions {
    
        firstviewcontroller *first = [[[firstviewcontroller alloc] init] autorelease];
        [self switchToViewController:first];
    
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    
    - (void)switchToViewController:(UIViewController *)aViewController {
        [currentViewController.view removeFromSuperview];
        [currentViewController release];
    
        currentViewController = [aViewController retain];
        [self.window addSubview:currentViewController.view];
    }
    
    -(IBAction)gotosecondview:(id)sender { 
        [self switchToViewController:[[[secondviewcontroller alloc] init] autorelease]];
    }
    
    @end
    

    在这里,维持单个UIViewController 活动的所有逻辑都在switchToViewController 方法中,该方法还处理从一个视图切换到另一个视图的逻辑。作为额外的奖励,您可以通过在 switchToViewController 中添加几行来快速添加对动画的支持。

    【讨论】:

    • 感谢 pgb 的精彩解释。这里有一段不错的代码。
    【解决方案2】:

    您不能在通话中释放视图。 在这种情况下,你只能做一件事。使用自动释放,

    【讨论】:

      【解决方案3】:

      [second release] 使您的代码崩溃的原因可能是因为您正在释放视图控制器,而后者又会释放第二个视图。 iPhone 食谱有一些关于切换/交换视图的示例代码,如果这就是你想要完成的全部。这是链接。希望这会有所帮助!

      link text

      【讨论】:

      • 非常感谢你的朋友...这个链接有很多信息。我下载了所有这些,这在为 iphone 和 ipad 编程时会非常方便。非常感谢朋友。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2011-08-28
      • 2013-08-08
      • 1970-01-01
      相关资源
      最近更新 更多