NSFetchedResultsSectionInfo не согласна с тем, сколько у нее объектов - PullRequest
7 голосов
/ 19 октября 2010

Я разместил это на форумах разработчиков Apple здесь, так как мне кажется, что это ошибка в реальном SDK, но я решил опубликовать это здесь и посмотреть, сможет ли кто-нибудь проверить, использую ли я это или нет. что-то неправильно (не похоже на это) или это неправильное поведение.

https://devforums.apple.com/thread/72738

-

Потратив немного времени на отладку некоторого кода, я обнаружил очень странное и тревожное поведение экземпляра NSFetchedResultsSectionInfo.

NSFetchedResultsController *frc = [self frcForTableView:tableView];

id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex:
                                                [indexPath indexAtPosition:1]];

NSLog( @"Looking at %@ with section %@ (%d objects)",
       indexPath, [sectionInfo objects], [sectionInfo numberOfObjects] );

По сути, я беру FRC, затем вытаскиваю из него один из объектов sectionInfo (не беспокойтесь о том, почему я берусь за позицию пути индекса 1, а не 0 ... здесь это не должно иметь значения). Интересно, что вывод NSLog для приведенного выше:

Looking at <NSIndexPath 0x8828ee0> 2 indexes [0, 0] with section (
    "TBN.B x 1 for order 1187",
    "TBN.T x 1 for order 1187"
) (1 objects)`

Таким образом, массив [sectionInfo objects] содержит две вещи, но [sectionInfo numberOfObjects] сообщает, что он имеет только одну. Чтобы исключить возможность кеширования, я отключил все кеширование в настройке FRC перед запуском этого кода.

Довольно тупо здесь. Не знаю, как отдельный объект sectionInfo может не согласиться с тем, сколько в нем объектов.

Есть идеи от разработчиков Apple? Запуск XCode 3.2.4 и 4.1 SDK.

Редактировать: К вашему сведению, правильный объект для этого раздела на самом деле является первым (TBN.B), поэтому в моем тестировании до сих пор оказалось, что если вы рассматриваете только часть массива объектов до numberOfObjects тогда вы получите правильные результаты. Тем не менее, все еще любопытно, почему дополнительный объект появляется в конце массива, когда он не является частью этого раздела.

Ответы [ 2 ]

1 голос
/ 08 апреля 2016

Здесь прошло 5 с половиной лет после того, как вопрос был задан изначально.Мы находимся на Xcode 7.x, и ошибка, кажется, все еще здесь.Кто-нибудь выяснил, почему это происходит.Решение, которое я придумала, состоит в том, чтобы просто проверить это условие в controllerDiDChangeContent и, если оно существует, заново создать FRC.Для меня это нормально, так как это происходит только тогда, когда вы начинаете с 0 разделов и добавляете второй раздел под ним.Вот очень хорошая статья о том, как воссоздать эту ошибку.Думаю, не так много людей ставят итоги в нижние колонтитулы.

https://devforums.apple.com/message/328077#328077

0 голосов
/ 05 декабря 2013

Мои тесты показали, что массив «объекты» первого раздела всегда содержит все объекты в контроллере.Я думаю, что это ошибка структуры.

Это действительно грязный (и медленный) обходной путь:

NSArray * allObjects = self.cachedFetchedResultsController.fetchedObjects;
NSMutableArray * objectsInSectionZero = [NSMutableArray array];
for (id obj in allObjects) {
    if ([[self.cachedFetchedResultsController indexPathForObject:obj] section] == indexPath.section) {
        [objectsInSectionZero addObject:obj];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...