我有一个嵌入了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)]
我已尝试使用其他属性,我可以正确访问它们。谢谢你的帮助。
答案 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对象中的字段正在释放。