【问题标题】:Why does the view nib doesn't open after cell is selected?为什么选择单元格后视图笔尖不打开?
【发布时间】:2011-06-25 07:07:36
【问题描述】:

我创建了 nib 文件,并且正确地完成了所有连接。当我运行应用程序并选择一个单元格时,新的笔尖根本没有打开。请帮忙!

    - (void)tableView:(UITableView *)tableView 
 didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    //Get the selected country
NSString *selectedCountry = [[NSString alloc] initWithFormat:@"you pressed for this."];

//Initialize the detail view controller and display it.
DetailViewController *dvController = [[DetailViewController alloc] 
                                      initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];

dvController.selectedCountry = selectedCountry;
[self.navigationController pushViewController:dvController animated:YES];
[dvController release];
dvController = nil;

}

【问题讨论】:

  • 释放selectedCountry 否则你会泄露。它在导航控制器上吗?在pushViewController:animated: 方法之后立即尝试NSLog(@"%@ %@", self.navigationController, dvController); 并告诉我们结果。
  • 你犯了哪个错误? dvController = nil; 也不需要,因为你之前从内存中删除了 dvController。
  • @Deepak,我在 DetailViewController.m 中发布了 selectedCountry 并尝试了您告诉我的内容,但没有成功!
  • @Sherilyn,我实际上没有收到任何错误。它构建得非常好,但是当我单击单元格时,笔尖根本没有加载。我也尝试删除 dvController = nil 但它没有做任何事情。不过谢谢!

标签: iphone objective-c iphone-sdk-3.0


【解决方案1】:

看起来(基于没有为NSLog 语句记录的输出)您没有正确设置delegate,否则它会记录null 或某些对象值。您需要重新检查您的 IB 连接,或者如果您已通过编程方式完成,请执行 tableView.delegate = self;

【讨论】:

    【解决方案2】:

    试试这个:

    
    DetailViewController *dvController = [[DetailViewController alloc] 
                                          initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
    
    dvController.selectedCountry = selectedCountry;
    [self.navigationController pushViewController:dvController animated:YES];
    dvController = nil;
    

    【讨论】:

      【解决方案3】:

      希望您尝试从 listviewcontroller 加载 detailvewcontroller。而表视图是listviewcontroller的成员。

      问题的可能原因。

      如果您将 listviewcontroller.view 作为子视图添加到任何其他 viewcontollers 视图,那么

      [self.navigationController pushViewController:dvController Animation:YES];不工作。

      因此,您应该获取应用委托的实例并执行以下操作。

      YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
      
      [appDelegate .navigationController pushViewController:dvController animated:YES];
      

      检查一下。如果这不是您的问题的原因,请告诉我 Deepak 询问您的控制台输出。

      【讨论】:

        【解决方案4】:

        不要同时释放dvController 并将其设置为nil - 只做一个。

        【讨论】:

        • 重申一下,释放对于遵守内存管理规则是必要的。 nil-ing 然而是不必要的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多