在尝试从 Core Data 中删除一些对象时,我在使用 NSMutableIndexSet 类及其方法“addIndex:”时遇到了一些困难。
在核心数据中,我有文件夹对象,其中包含一组线程对象。每个线程都有一个 threadId 属性,它是一个 uint64_t。我正在尝试为这些线程 ID 创建一个可变索引集,以便我可以枚举它们以删除它们关联的线程。
当我开始尝试将我的 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);
}
谁能告诉我我做错了什么以及如何解决?谢谢