我有2个实体(和两个tableViews)我的第一个实体名称是Person第二个是Event,在我的第一个tableView中有人名,在第二个他们的事件中,我在Person和Event之间有一对多的关系。我只想要当用户点击其中一个名称时,第二个tableView将向他显示该人的事件(类型)。问题是我得到空单元格。
这是我添加新活动的方式:
- (void) addEventControllerDidSave{
NSManagedObjectContext* context = [self managedObjectContext];
Event *newEvent = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:context];
[newEvent setType:@"dennis"];
[currentPerson addEventsObject:newEvent];
NSError *error;
if (![[self managedObjectContext] save:&error])
{
NSLog(@"Problem saving: %@", [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
我知道这个方法不是动态的,我会得到事件类型“dennis”,这只是为了测试。
我的第二个tableView方法:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[self currentPerson] events] count];
}
最重要的方法我认为问题在这里(或在保存方法中):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"eventsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (nil == cell)
{
NSEnumerator *enumerator = [[[self currentPerson] events] objectEnumerator];
Event *event = [[enumerator nextObject]objectAtIndexPath:indexPath];
[[cell textLabel]setText:[event type]];
}
return cell;
}
更新 正如ophychius所说,我将我的定义细胞系移出if,并将它们改为:
//create cell use relation
NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
Event *newEvent = [eventsArray objectAtIndex:indexPath.row];
[[cell textLabel]setText: [newEvent type]];
答案 0 :(得分:1)
尝试移动线
NSEnumerator *enumerator = [[[self currentPerson] events] objectEnumerator];
Event *event = [[enumerator nextObject]objectAtIndexPath:indexPath];
[[cell textLabel]setText:[event type]];
在if块之外的。 if if里面需要你创建单元格的代码如果你还没有(你试图在if块之前检索)
现在你可能没有创建单元格,如果你是,你没有在其中放置文本,因为一旦你有了一个单元格,就会跳过if块。
以下是一个例子:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSEnumerator *enumerator = [[[self currentPerson] events] objectEnumerator];
Event *event = [[enumerator nextObject]objectAtIndexPath:indexPath];
[[cell textLabel]setText:[event type]];
return cell;
}