2013-06-02 64 views
0

我正在使用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"]; 
+0

請問您的對象有關係依賴於任何其他實體? – kushyar

+0

嘗試在您的謂詞中將%i更改爲%d –

+0

@kushyar我只有一個實體動畫。 –

回答

0

從NSNumber的 獲取NSInteger的價值就像

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

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

// or in 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timestamp == %d", timestampNumber];