NSMutableArray属性在dequeueReusableCellWithIdentifier中不起作用

时间:2014-12-02 02:17:23

标签: ios objective-c uitableview nsmutablearray

我有一个嵌入了tableView的视图控制器。我有以下代码。

@property (nonatomic, strong) NSMutableArray* eventArray;

- (void)viewDidLoad {

    [super viewDidLoad];
    self.eventTableView.delegate = self;
    self.eventTableView.dataSource = self;

     if (!self.eventArray){
        self.eventArray = [[NSMutableArray alloc] init];
     }

    ...

    for(NSDictionary* dict in responseObject){

            [self.eventArray addObject:[[Event alloc] initWithEventName:[dict valueForKey:@"Name"]eventDescription:[dict valueForKey:@"Description"]]];
        }

    [self.eventTableView reloadData];
}



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    for(Event* event in self.eventArray)
    {
        NSLog(@"Event Name in numberofRows: [%@]", [event eventName]);
    }
    return [self.eventArray count];
}



- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *MyIdentifier = @"EventCell";

    EventTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    Event* eventForCell = (Event*)[self.eventArray objectAtIndex:[indexPath row]];

    NSLog(@"eventArraySize [%lu]", [self.eventArray count]);

    for(Event* event in self.eventArray)
    {
        NSLog(@"Event Name: [%@]", [event eventName]);
    }


    [cell.eventNameLabel setText: [eventForCell eventName]];
    return cell;
}

当代码运行时,我看到对象已成功添加到eventArray中,并且我在numberOfRowsInSection中打印的日志循环将打印以下内容

Event Name in numberofRows: [Worship Rehearsal]
Event Name in numberofRows: [Worship Rehearsal]
Event Name in numberofRows: [Worship Rehearsal]

cellForRowAtIndexPath中的相同循环打印出以下

eventArraySize [3]
Event Name: [(null)]
Event Name: [(null)]
Event Name: [(null)]

我已尝试使用其他属性,我可以正确访问它们。谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

您的活动名称为零。这是因为初始化阵列时出现问题。

这是错误的[dict valueForKey:@"Name"]

使用此[dict objectForKey:@"Name"]

或只是dict[@"Name"]

答案 1 :(得分:0)

要打印每个单元格的事件名称,您可以尝试使用此代码吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *MyIdentifier = @"EventCell";

    EventTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    Event* eventForCell = (Event*)[self.eventArray objectAtIndex:[indexPath row]];

    NSLog(@"eventArraySize [%lu]", [self.eventArray count]);

    //for(Event* event in self.eventArray)
    //{
    //   NSLog(@"Event Name: [%@]", [event eventName]);
    //}
    //Commenting above code

    NSLog(@"Event Name: [%@]", [eventForCell eventName]);

    [cell.eventNameLabel setText: [eventForCell eventName]];
    return cell;
}

答案 2 :(得分:0)

我能够解决这个问题,谢谢你的帮助。问题出在我的事件对象中,属性被设置为弱而不是强引用。一旦我将它们改为:

@property (strong, nonatomic) NSString *eventName;

对象开始按预期工作。数组本身工作正常,但我的Event对象中的字段正在释放。