Я использую UICollectionView вместе с Core Data.Основные данные: deleteObject сбой приложения, NSPredicate причина?
Я не могу понять, почему я не могу удалить объект из Core Data. Он падает на [self.managedObjectContext deleteObject:animation];
с ошибкой index 0 beyond bounds for empty array
. Следующий метод - это метод делегата, который вызывается из другого диспетчера представлений. Он получает отметку времени NSInteger и должен создать NSPredicate с этой меткой времени.
Странно то, что когда я беру анимацию Timestamp NSInteger и hardcode, она нравится: [NSPredicate predicateWithFormat:@"timestamp == %i", @"1370169109"]
работает, и объект удаляется без ошибки. Однако, когда я хочу передать параметр в качестве аргумента, он сработает. Я попытался сделать его строкой, NSNumber и т. Д. Ничего не работает, когда я беру параметр, это происходит только тогда, когда я его жестко кодирую. Я зарегистрировал animationTimestamp и он показывает правильное значение, поэтому я застрял.
Спасибо!
- (void)deleteAnimationWithTimestamp:(NSInteger)animationTimestamp {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Animations" inManagedObjectContext:self.managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timestamp == %i", animationTimestamp];
[fetchRequest setPredicate:predicate];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *animations = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *animation in animations) {
[self.managedObjectContext deleteObject:animation];
}
// Save core data
if (![self.managedObjectContext save:&error]) {
NSLog(@"Couldn't save: %@", [error localizedDescription]);
}
[self.animationsCollectionView reloadData];
}
EDIT: Дополнительная информация, которая может иметь значение. Атрибут timestamp в модели - это 64-битное целое число (должно быть, кстати?). Когда я создаю объект я использую:
NSNumber *timestampNumber = [NSNumber numberWithInt:timestamp];
[newAnimation setValue:timestampNumber forKey:@"timestamp"];
ли ваш объект зависимость отношения к любому другому лицу? – kushyar
попробуйте изменить от% i до% d в вашем предикате –
@kushyar У меня есть только одна сущность, анимация. –