0

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

1 回答 1

1

尝试移动线条

    NSEnumerator *enumerator = [[[self currentPerson] events] objectEnumerator];
    Event *event = [[enumerator nextObject]objectAtIndexPath:indexPath];
    [[cell textLabel]setText:[event type]];

在 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;
}
于 2012-12-11T14:56:02.440 回答