tableView показывает заголовок, использует основные данные (отношение)

У меня есть 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];
    }

Я знаю, что этот метод не является динамическим, и я всегда буду получать тип события "деннис", это просто для теста.

мои вторые методы 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;
}

обновление: как сказал офихий, я перемещаю свои линии ячеек определения из if и меняю их на:

//create cell use relation
    NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
    Event *newEvent = [eventsArray objectAtIndex:indexPath.row];
    [[cell textLabel]setText: [newEvent type]];

person Dennis    schedule 11.12.2012    source источник


Ответы (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;
}
person ophychius    schedule 11.12.2012
comment
решение ophychius правильное, но не уверен, почему для начала есть этот код перечислителя. Просто получите [[[self currentPerson] events] objectAtIndex:indexPath.row] type]; потому что, если мы получаем список событий, код кажется неверным. - person Srikanth; 11.12.2012
comment
никакой видимый интерфейс для «NSSet» не объявляет селектор «objectAtIndex:» событием является NSSet, поэтому я пытаюсь использовать перечислитель. когда я пытаюсь использовать решение @ophychuis, мое приложение разбивается, и у меня возникает эта ошибка: причина: '-[Event objectAtIndexPath:]: нераспознанный селектор отправлен экземпляру - person Dennis; 11.12.2012
comment
Наконец-то я решил это: NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects]; Событие *newEvent = [массив событий objectAtIndex:indexPath.row]; [[ячейка textLabel]setText: [тип нового события]]; Я отметил офихий как правильный ответ. потому что его ответ действительно правильный. - person Dennis; 11.12.2012