我正在使用 UICollectionView 和 Core Data。
我似乎无法弄清楚为什么我不能从 Core Data 中删除对象。[self.managedObjectContext deleteObject:animation];
它因错误而崩溃index 0 beyond bounds for empty array
。以下方法是从另一个视图控制器调用的委托方法。它得到一个时间戳 NSInteger 并且应该使用该时间戳创建一个 NSPredicate。
奇怪的是,当我使用 animationTimestamp NSInteger 并对其进行硬编码时:
[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];
}
编辑:更多可能重要的信息。模型中的timestamp属性是一个64位的整数(应该是顺便吧?)。当我创建我使用的对象时:
NSNumber *timestampNumber = [NSNumber numberWithInt:timestamp];
[newAnimation setValue:timestampNumber forKey:@"timestamp"];