在試圖從核心數據刪除一些對象時,我遇到了一些困難,使用NSMutableIndexSet類和它的方法'addIndex:'。NSMutableIndexSet addIndex:方法拋出錯誤
在覈心數據中,我有文件夾對象,其中包含一組線程對象。每個線程都有一個uint64_t的threadId屬性。我試圖創建這些線程標識符的可變索引集,以便我可以通過它們枚舉來刪除它們的關聯線程。
當我開始嘗試我的threadId的添加到我的可變索引集,我出現以下錯誤崩潰:
[NSMutableIndexSet addIndexesInRange:]: Range {3982867280, 1} exceeds maximum index value of NSNotFound - 1'
這是沒有意義的,因爲我不是調用方法「addIndexesInRange: '如錯誤所示。
另外,'addIndex:'需要一個NSUInteger參數,但是從我讀的內容來看,這應該與uint64_t互換。
下面是代碼:
- (void)removeAllThreadsForFolder:(Folder *)folder
{
NSError *error;
NSArray *threads = [self fetchThreadsForFolder:folder error:&error];
NSMutableIndexSet *threadIds = [NSMutableIndexSet new];
for (Thread *thread in threads) {
uint64_t threadId = thread.threadId; //the threadId does exist
[threadIds addIndex:threadId]; //CRASH HERE!!!!!!!!!!!!!!!!!
}
[threadIds enumerateIndexesUsingBlock:^(NSUInteger threadId, BOOL *stop) {
[self removeThreadForFolder:folder threadId:threadId];
}];
[self saveContext:&error];
NSLog(@"folder now has %i threads", folder.threads.count);
}
誰能告訴我我在做什麼錯誤,也許如何解決?謝謝
*注:*即使指數被表示爲'NSUInteger','NS(可變)IndexSet'只能在'範圍內舉行的索引0 .. NSIntegerMax- 1'。這從文檔(對我來說)並不明顯,但是是快速測試的結果。因此,編號3982867280不能用作索引。 - (這不會改變你的結論的正確性。) –
謝謝你的解釋。 – jac300