2013-06-02 4 views
0

Я использую 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"]; 
+0

ли ваш объект зависимость отношения к любому другому лицу? – kushyar

+0

попробуйте изменить от% i до% d в вашем предикате –

+0

@kushyar У меня есть только одна сущность, анимация. –

ответ

0

Получить значение NSInteger от NSNumber Как

NSInteger timestampNumber = [[NSNumber numberWithInt:timestamp] integerValue]; 
// then use this integer 

[newAnimation setValue:timestampNumber forKey:@"timestamp"]; 

// or in 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timestamp == %d", timestampNumber]; 
Смежные вопросы