tableView显示标题使用核心数据(关系)

时间:2012-12-11 14:50:34

标签: ios core-data tableview cell relation

我有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]];

1 个答案:

答案 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;
}