У меня возникли проблемы с контекстом в Core Data, который не удалось сохранить.Сбой основных данных при попытке сохранить после удаления
Я получаю случайные сбои при попытке вызвать [контекстное сохранение:]. Иногда это работает, иногда это не так и приводит к сбою приложения. Вот мой код удаления. Я смог уменьшить количество сбоев, проверяя, сохраняется ли [context responseSoSelector]. Странно, что это даже тогда, когда он терпит неудачу (отвечаетSoSelector не удается), и я не вызывал save, он по-прежнему удаляется !? Но также, когда responseSoSelector преуспевает, и я пытаюсь вызвать save, он по-прежнему иногда сбой. Таким образом, код является немного более стабильным с тестом, но я думаю, что что-то не так с Core Data и методом save. Было очень сложно отследить проблему, потому что это действительно кажется случайным.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the managed object.
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
Accidents* accidentDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
[context deleteObject:accidentDelete];
// Causing crash...
NSError *error = nil;
if ([context respondsToSelector:@selector(save:)])
if (![context save:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
else
NSLog(@"Error! Context does not respond to save!");
}
}
Я не получал плохой доступ, но вместо SIG-BIT. Но ваш намек на добавление переменных окружения - это то, что мне нужно, чтобы понять, почему он рушится. По какой-то причине я выслал объект даты слишком рано, а затем обратился к нему. Когда Core Data пошли на его сохранение, его больше не было и разбился. Я решил это, сделав объект даты объектом автоматического выпуска [NSDate date]. Кажется, теперь это работает. После включения переменной окружения я получил сообщение консоли, в котором сообщалось, что я отправлял сообщение в объект даты, который был выпущен, что было намеком, в котором я нуждался. –