Попытка создать USE_BLOCK_IN_FRAME… EXC_BAD_ACCESS с NSFetchedResultsController

Это обновление моей проблемы. Я получаю это предупреждение сейчас, когда программа прерывается. предупреждение: Попытка создать переменную USE_BLOCK_IN_FRAME с блоком, которого нет в кадре.

Я не могу найти много информации о том, что это означает.


Это меня озадачило. Я получаю ошибку EXC_BAD_ACCESS. У меня есть NSZombieEneabled (который помог с более ранней проблемой), но нет стека вызовов для отслеживания.

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

Кажется, в этом есть что-то, что нужно делать с отношениями между сущностью задания и связанной с ней клиентской сущностью. Связь следующая: [объект задания] <<--> [объект клиента].

Изначально я вижу, что код работает без ошибок, когда объект задания, соответствующий выбранной строке, не имеет объекта-клиента, связанного посредством отношения. Таким образом, в случае сбоя это указывает на клиентскую сущность, но когда это не удается, указатель равен нулю.

Когда я сталкиваюсь с этой проблемой, я запускаю приложение, перехожу прямо в окно выбора задания и выбираю ячейку. Именно в этот момент и возникает проблема.

Я провел эксперимент, запустив приложение и сначала перейдя в режим выбора клиента, зная, что выборка будет происходить из всех клиентских объектов. Затем я перешел в режим выбора вакансий и выбрал ячейку. Проблема не возникла.

Поскольку я просто пытаюсь передать указатель на объект задания, который уже был получен, я не понимаю, что происходит.

Между прочим, код работал нормально до того, как я переключился на использование NSFetchedResultsControllers. Мне нравится то, что они могут сделать для меня, но здесь происходит некоторая динамика, которую я не понял.

Журнал не показывает мне ничего, что я понимаю для решения проблемы.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    userState.selectedJob = [self.fetchedResultsController objectAtIndexPath:indexPath];
    NSLog(@"\n\n(1 Pick) indexPath: %@\n",indexPath);
    NSLog(@"\n\n(1 Pick) userState: %@\n",userState);    
    NSLog(@"\n\nnumber of Objects in job fetchresultscontroller = %d", [[fetchedResultsController fetchedObjects] count] );    
    NSLog(@"\n\n(1 Pick) selected job: %@\n",[self.fetchedResultsController objectAtIndexPath:indexPath]); // This line is causing the problem...
    NSLog(@"\n\n(1 Pick) selected job: %@\n",userState.selectedJob); // Omitting the line above, this line fails 
    [self.navigationController pushViewController:userState.jobInfoTVC animated:YES];     
}

Результат отладки:

2011-05-07 09:27:04.142 job1[6069:207] 

(1 Pick) indexPath: <NSIndexPath 0x5952590> 2 indexes [0, 3]
2011-05-07 09:27:04.142 job1[6069:207] 

(1 Pick) userState: <UserStateObject: 0x5919970>
2011-05-07 09:27:04.143 job1[6069:207] 

number of Objects in job fetchresultscontroller = 4
(gdb) 

Окончательный код должен быть таким простым, что и привело меня ко всей записи в журнал:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    userState.selectedJob = [self.fetchedResultsController objectAtIndexPath:indexPath]; // Original failure was at this line
    [self.navigationController pushViewController:userState.jobInfoTVC animated:YES];     
}

Я используйте singleton userState для отслеживания того, что сделал пользователь. Поэтому я сохраняю указатели на последние selectedJob и selectedClient. Это работало нормально, пока я не переключился на NSFetchedResultsController.

7
задан Jim 7 May 2011 в 19:31
поделиться