首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableViewController加载在UIViewController内部UIViewController问题

UITableViewController加载在UIViewController内部UIViewController问题
EN

Stack Overflow用户
提问于 2011-03-28 23:12:03
回答 3查看 1.4K关注 0票数 0

我真的不知道我正在做的是不是正确的方式。现在,它似乎一直在工作,直到它通过EXC_BAD_ACCESS消息到达某个点。

我将尽可能详细地描述我正在做的事情:我有一个继承了从.xib文件(CalendarViewController.xib)加载的UIViewController的CalendarViewController。这个类包含一个名为contentView的UIView,它是我创建的,并且我使用另一个基于类的nib文件初始化它,这个类也是从UIViewController继承的:

代码语言:javascript
复制
- (void)viewDidLoad {

      [super viewDidLoad];

      calendarView = [[CalendarView alloc] initWithNibName:@"CalendarView" bundle:nil];

      [contentView addSubview:calendarView.view]; 

   }

(calendarView是继承UIViewController的类,viewDidLoad是来自CalendarViewController的类。

CalendarView.xib有一个UITableViewController和它各自的UITableView。这个表视图控制器链接到一个CalendarTableController,我还为它生成了一个.xib文件。

一切都创建得恰到好处(显然),但它在非常意想不到的地方崩溃了。CalendarTableController还实现了一个DateLoaderDelegate,它从外部url上的xml加载信息。

代码语言:javascript
复制
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

   // When the data has all finished loading, we set a copy of the  
  // loaded data for us to access. This will allow us to not worry about
 //  whether a load is already in progress when accessing the data. 

    self.lastLoadedMatchXMLData = [self.matchXMLData copy]; 

 // Make sure the _delegate object actually has the xmlDidFinishLoading     
 // method, and if it does, call it to notify the delegate that the     
 // data has finished loading.  

 if ([_delegate respondsToSelector:@selector(xmlDidFinishLoading)])
 {      
     [_delegate xmlDidFinishLoading];
 } 

}

应用程序正在毫无问题地走到这一步。_delegate包含正确的对象(实现DateLoaderDelegate的CalendarTableController )。但是当它到达线的时候:

代码语言:javascript
复制
  if ([_delegate respondsToSelector:@selector(xmlDidFinishLoading)])

它与EXC_BAD_ACCESS一起崩溃,我真的不知道原因,如果我看着调试器,崩溃没有发生在我的任何类中,因为它们都出现在执行堆栈中。看起来是URLConnectionClient生成的,但我真的不知道为什么。在我重新排列ViewControllers以使其按照我现在所描述的方式工作之前,xml的加载已经正常工作了。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-28 23:33:33

检查是否已经为所有子视图定义了属性,并且保留了所需的所有内容。错误的访问可能意味着您试图在已释放的对象上调用respondsToSelector

票数 0
EN

Stack Overflow用户

发布于 2011-03-29 06:31:34

这很奇怪。我修复了这个问题,但是我不得不使用整个UIViewController来包含UITableView。我做的是这样的:

在自定义UIViewController.

  • In中,
  1. 使用自定义UITableViewController (CalendarTableViewController)创建IBOutlet加载的.xib文件我将该IBOutlet链接到已创建的声明为UITableViewController的UITableViewController

通过这种方式,我解决了UITableViewController无端释放的问题。但是现在,我放置在中间UIViewController中的图像视图将不会出现。我必须将该UIViewController设置为仅包含CalendarTableView,并将图像视图放在初始UIViewController中。很奇怪,不是吗?我不太喜欢我创造的等级制度...但就目前而言,这就够了。

票数 1
EN

Stack Overflow用户

发布于 2011-06-26 10:46:33

在将嵌套控制器的视图添加到父视图之前,您是否尝试过调用loadView?

可能在添加视图之前viewDidLoad没有执行,并且一些变量从未初始化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5461047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档