2013-06-04 2 views
0

Я создаю контроллер табличного представления для приложения, которое управляет назначением позиции для команды. Например, разделы с заголовками для защиты, центра и правонарушения будут иметь имена в них, если позиция Entity существует с этой positionProperty. Если это лицо удаляется, хотя через swiping, они становятся альтернативным объектом с одинаковым positionProperty.Получение indexPath объекта в FetchedResultsController

Я пытаюсь иметь альтернативы для каждого отображения позиции при нажатии кнопки редактирования. Подобные дополнительные контактные данные появляются при редактировании контакта в приложении контактов.

У меня есть fetchedResultsController, возвращающий родительский объект для alts/position, определяемый позициейProperty для определения разделов. (Это может быть неправильный способ сделать это ... Я новичок в Core Data).

В setEditing: WithAnimation Я сделал следующее. Попытка выполнить поиск полученных результатов и если какие-либо объекты имеют тип Alternate, отобразите эту строку. Поэтому в перечислении, если это тип alternate, я попытался вызвать IndexPathForObjects: alt. Это только что вернулось ...

if(editing){ 

     [self.tableView beginUpdates]; 

     for (MCAlternate *alt in fetchedResultsController.fetchedObjects) { 
      if ([alt isKindOfClass:[MCAlternate class]]) { 
       NSLog(@"The alternate is: %@", alt); 

       // This is where the error is trying to get indexPathForObject 
       NSIndexPath *index = [fetchedResultsController indexPathForObject:alt]; 
       [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[index] withRowAnimation:UITableViewRowAnimationLeft]; 
      } 
     } 
     [self.tableView endUpdates]; 
    } 

Я проверил, существует ли объект в результатах. Оно делает. Я также попробовал вызвать getindexpath в месте, где объект был создан только вызовом objectAtIndexPath, и он все равно вернулся.

любые предложения приветствуются, спасибо!

ответ

0

Возможно, вы не используете выбранный вами контроллер результатов, как он предвидится. Ваш frc должен получить все данные, чтобы заполнить представление таблицы.

Вы все еще можете достичь динамического содержимого таблицы, настроив свой вид таблицы datasource. Предположим, вы извлекаете сущность «Позиция», и объект позиции, о котором идет речь, имеет атрибут to-many объекта «MCAlternate», называемый «alternates». Вы бы затем расширить определенную часть следующим образом:

-(void)expandSectionForPosition:(Position *)position { 
    int row = 0; 
    int section = [[frc indexPathForObject:position] section]; 
    for (MCAlternate *alt in position.alternates) { 
     // update your datasource - e.g. by marking the position as 
     // "expanded"; make sure your numberOfRowsInSection reflects that 

     [_tableView insertRowsAtIndexPaths:@[[NSIndexPath 
      indexPathForRow:i++ inSection:section]] 
      withRowAnimation:UITableViewRowAnimationLeft]; 
    } 
} 

Ваш чек класс не логично - вы заброса MCAlternate в цикл в любом случае. Ваш вызов или получение указательного пути завершается неудачно, потому что у вас обычно нет отдельного контроллера результатов.

+0

Я не знаю, почему я не думал о том, чтобы иметь много отношений от позиции, чтобы чередовать! Я знал, что моя модель не идеальна, но не может понять лучший способ. Я пойду с этим. Что касается моего чека на MCAlternate ..., то быстрое перечисление возвращало все (обе позиции и альты), которые были в FRC. Я думал, что это странно, но я решил, что проверка класса решит его. Спасибо за предложение модели CD. – WCByrne

Смежные вопросы