我真的不知道我正在做的是不是正确的方式。现在,它似乎一直在工作,直到它通过EXC_BAD_ACCESS消息到达某个点。
我将尽可能详细地描述我正在做的事情:我有一个继承了从.xib文件(CalendarViewController.xib)加载的UIViewController的CalendarViewController。这个类包含一个名为contentView的UIView,它是我创建的,并且我使用另一个基于类的nib文件初始化它,这个类也是从UIViewController继承的:
- (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加载信息。
- (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 )。但是当它到达线的时候:
if ([_delegate respondsToSelector:@selector(xmlDidFinishLoading)])它与EXC_BAD_ACCESS一起崩溃,我真的不知道原因,如果我看着调试器,崩溃没有发生在我的任何类中,因为它们都出现在执行堆栈中。看起来是URLConnectionClient生成的,但我真的不知道为什么。在我重新排列ViewControllers以使其按照我现在所描述的方式工作之前,xml的加载已经正常工作了。
有什么想法吗?
发布于 2011-03-28 23:33:33
检查是否已经为所有子视图定义了属性,并且保留了所需的所有内容。错误的访问可能意味着您试图在已释放的对象上调用respondsToSelector。
发布于 2011-03-29 06:31:34
这很奇怪。我修复了这个问题,但是我不得不使用整个UIViewController来包含UITableView。我做的是这样的:
在自定义UIViewController.
通过这种方式,我解决了UITableViewController无端释放的问题。但是现在,我放置在中间UIViewController中的图像视图将不会出现。我必须将该UIViewController设置为仅包含CalendarTableView,并将图像视图放在初始UIViewController中。很奇怪,不是吗?我不太喜欢我创造的等级制度...但就目前而言,这就够了。
发布于 2011-06-26 10:46:33
在将嵌套控制器的视图添加到父视图之前,您是否尝试过调用loadView?
可能在添加视图之前viewDidLoad没有执行,并且一些变量从未初始化。
https://stackoverflow.com/questions/5461047
复制相似问题