iPhone:TableView cellForRowAtIndexPath方法问题

时间:2011-11-09 06:24:31

标签: iphone

我正面临cellForRowAtIndexPath tableview委托方法

中的崩溃问题
@interface EventListView : UIViewController <UITableViewDelegate, UITableViewDataSource> 

IBOutlet UITableView *tblView;
NSMutableArray  *arr_EventValues,*arr_Event_Details;
NSMutableArray  *arr_EventListDetails;

@property(nonatomic, retain)NSMutableArray *arr_EventValues,*arr_EventListDetails, *arr_Event_Details; 
@property(nonatomic, retain)UITableView *tblView;

- (void)viewDidLoad  
{
     appdelegate = (VibesGuideAppDelegate *)[[UIApplication sharedApplication] delegate];
     ViewCalendar = [[CalendarView alloc] initWithNibName:@"CalendarView" bundle:[NSBundle mainBundle]];
     [self.navigationController.navigationBar setHidden:YES];
     self.arr_Event_Details = [[NSMutableArray alloc] init]; 
     self.arr_EventValues = [[NSMutableArray alloc] init];
     [super viewDidLoad];
}

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
     return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if ([self.arr_EventListDetails count] > 0)
     {
         return [self.arr_EventListDetails count];
     }
    return 0;
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    // ------------------------------- Custom cell ------------------------------
    Customcell  *cell = (Customcell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

     cell = [[[Customcell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

     cell.textLabel.text = @"Hello";    
     return cell;
 }

* - [EventListView tableView:cellForRowAtIndexPath:]:发送到解除分配的实例0x60e01b0的消息,我使用了来自xib的tableview并设置了所有连接并且在方法中的numberOfRowsInSection中也得到了数值,但在cellForRowAtIndexPath方法中没有调用,所以请给我一个想法我的问题....

提前致谢。

4 个答案:

答案 0 :(得分:2)

起初,似乎你的某个变量被释放了。确保您已正确分配它。如果您已为其声明@property,则最好将变量用作self.variable。您可以在属性声明中使用retain,如果是IOS 5 strong

只是为了确保您可以通过将NSZombieEnabled设置为YES来跟踪是否有任何变量被释放。启用僵尸后,释放对象的消息将不再出现奇怪的行为或以难以理解的方式崩溃,而是以可预测和调试器可破解的方式记录消息并死亡。您可以通过以下步骤设置NSZombieEnabled。

从上面的菜单栏中选择产品。按住alt /选项并选择“测试...”或“运行...”。转到Arguments选项卡,在“Environment Variables”部分添加NSZombieEnabled YES。

答案 1 :(得分:2)

您的 tableview本身已经发布 - 错误消息显示您将 cellForRowAtIndexPath 消息发送到表视图的解除分配的实例 - 所以您的问题出在某处保留或释放 EventListView ,但在此处显示的代码中无法看到。

答案 2 :(得分:0)

检查一下:

  

是否设置了表DataSource和委托。   cellForRowAtIndexPath中使用的数组已正确设置属性,并与self一起使用。名。

答案 3 :(得分:0)

首先,您将单元格出列,然后创建一个新单元格。这不是一个好习惯,如果你能够将一个单元格出列,你就不应该创建一个新的单元格。你应该有这样的东西:

 Customcell  *cell = (Customcell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

 if(cell == nil)
 {
     cell = [[[Customcell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
 }

解决此问题,如果您仍然遇到同样的问题,请告诉我。