ios - NSRange 在 for 循环中改变自身

标签 ios objective-c nsrange nsexception nsrangeexception

我有一个 NSRange 对象的 NSDictionary,其中的键是它们在数组中的索引。我试图使用这些范围中的每一个来创建更大字符串的子字符串,并将这些子字符串中的每一个放入数组中。我基本上已经完成了这个,但是 NSRange 神秘地改变了它在代码中的值,导致它崩溃并抛出异常。这是我的代码:

NSMutableArray*subStringArray = [[NSMutableArray alloc] init];
for(id key in aDict){
            NSRange* range = CFBridgingRetain([aDict objectForKey:key]);
            NSLog(@"This is a single range: %@",range);
            //Range is changed here somehow
            NSString* aSubString = [self.content substringWithRange:*range];
            NSLog(@"%@",aSubString);
            [subStringArray addObject:aSubString];
        }

我的日志输出如下所示:

This is a single range: NSRange: {1874, 72}
2014-06-17 20:07:30.100 testApp[8027:60b] *** Terminating app due to uncaught exception     
'NSRangeException', reason: '-[__NSCFString substringWithRange:]: Range {4318599072, 4} out of bounds; string length 5562'

最佳答案

应大众需求:)

您的代码的主要问题是您直接在字典中存储一个 NSRange 结构。你不能这样做。您必须将 NSRange 包装在 NSValue 中以将其存储在字典中。

要添加 NSRange,您可以执行以下操作:

NSRange range = ... // some range
NSValue *value = [NSValue valueWithRange:range];
dict[someKey] = value;

然后你发布的代码变成:

for (id key in aDict) {
    NSValue *value = aDict[key];
    NSRange range = [value rangeValue];
    NSLog(@"This is a single range: %@",range);
    //Range is changed here somehow
    NSString* aSubString = [self.content substringWithRange:range];
    NSLog(@"%@",aSubString);
    [subStringArray addObject:aSubString];
}

关于ios - NSRange 在 for 循环中改变自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275235/

相关文章:

IOS 教程异常(ToDo 示例)

iphone - 在 uitableviewcell 内滚动时防止表格 View 滚动

ios - 来自 Swift Range 的 NSRange?

html - 如何在 ipad 中使 div 可滚动?

ios - 如何使用自定义 Parse 查询查找 whereKey : doesNotContainString:?

ios - 获取相册中最后保存的照片

ios - map 套件的用户体验

ios - 如何在 lldb 中创建和使用临时 NSRange?

Swift 4 中的字符串、子字符串、范围、NSRange

ios - UIActivityIndi​​cator 无法正常工作 Xamarin IOS