2012-03-07 48 views
0

我有下面的代码,试图设置一个GridView,我有一个GridviewController子类来管理数据源。这是用来设置它的代码。使用GridView的exc_bad_access,可能的内存管理失败?

  AQGridView* gridView = [[AQGridView alloc] initWithFrame:frame]; 
      NUBMyCpGridviewController* controller = [[NUBMyCpGridviewController alloc] init]; 
      gridView.dataSource = controller; 
      gridView.delegate = controller; 
      [gridView reloadData]; 

但是,应用程序在尝试访问数据源时崩溃。这是(在GridView类),使该尝试调用的方法和崩溃,它的行:

AQGridViewCell * cell = [_dataSource gridView: self cellForItemAtIndex: index]; 

该错误是EXC_BAD_ACCESS。可能是什么问题呢?是否因为对象被释放得太早?我该如何纠正它?

回答

0

你是对的;问题很可能是您的NUBMyCpGridviewController正在被释放。根据你的代码片段,看起来没有人保留它。

我的建议是无论你的类代码段正在被执行,使之成为strong@property的。

+0

我使用ARC。我怎么做?我是否向课堂或对象添加强大的属性?我必须在头文件中完成它吗? – nubela 2012-03-07 13:42:10

+0

无论您是否使用ARC,只需在您的.m中放置'@property(strong)NUBMyCpGridviewController * controller;'在.h,'@synthesize controller;'中,然后在您的.m中使用'self.controller'上面的代码而不是'controller'。 – yuji 2012-03-07 13:46:58

+0

P.S.如果你问这样的问题,你应该去看一些关于Objective-C和Cocoa的基本教程,当你有机会的时候。 – yuji 2012-03-07 13:55:52