我正在使用UICollectionView以及核心數據。核心數據:deleteObject崩潰應用程序,NSPredicate的原因是什麼?
我似乎無法弄清楚爲什麼我無法從核心數據中刪除一個對象。它崩潰在[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"];
請問您的對象有關係依賴於任何其他實體? – kushyar
嘗試在您的謂詞中將%i更改爲%d –
@kushyar我只有一個實體動畫。 –