- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在尝试从核心数据中删除一些对象时,我在使用 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);
}
任何人都可以告诉我我做错了什么以及如何解决吗?谢谢
最佳答案
NSMutableIndexSet addIndex:
方法需要一个 NSUInteger
类型,它是一个 unsigned long
。
构建 32 位应用程序时,这是一个 32 位值。当您为 64 位构建时,它是一个 64 位值。
您的 threadId
是一个 64 位值。除非您正在构建 64 位 iOS 应用程序,否则许多可能的线程 ID 值可能太大而无法适应 32 位 NSUInteger
值,因此会出现错误。
为什么要使用索引集来保存一组线程 ID?为什么不使用 NSMutableSet
或 NSMutableArray
?
然后你可以这样做:
NSMutableSet *threadIds = [NSMutableSet set];
for (Thread *thread in threads) {
uint64_t threadId = thread.threadId; //the threadId does exist
[threadIds addObject:@(threadId)];
}
[threadIds enumerateObjectsUsingBlock:^(NSNumber *threadId, BOOL *stop) {
[self removeThreadForFolder:folder threadId:[threadId unsignedLongLongValue]];
}];
关于ios - NSMutableIndexSet 添加索引 : Method Throws Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270034/
我有一个 NSMutableIndexSet: [number of indexes: 2 (in 2 ranges), indexes: (2 4)] 如何将索引数 (2) 设置为 int 等属性,
目前我正在执行以下操作以迭代 NSMutableIndexSet: if ([indexSet isNotNull] && [indexSet count] > 0){ __weak
在尝试从核心数据中删除一些对象时,我在使用 NSMutableIndexSet 类及其方法“addIndex:”时遇到了一些困难。 在核心数据中,我有文件夹对象,其中包含一组线程对象。每个线程都有一个
我是一名优秀的程序员,十分优秀!