0
我有一个NSRange对象的NSDictionary,它们的索引在数组中。我正在尝试使用这些范围中的每一个来创建较大字符串的子字符串,并将这些子字符串中的每一个放在数组中。我基本上已经完成了,但NSRange神秘地改变了它在代码中的价值,导致它崩溃并抛出异常。这里是我的代码: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'
几个问题:1)你不能直接存储的'NSRange'在字典(或其他收藏)。 2)'NSRange'是一个'struct',而不是一个类。不要用指针。 3)不要在'struct'中使用'CFBridgingRetain'。将'NSRange'包装在一个'NSValue'中以将其用于集合。 – rmaddy
@maddy,你应该充实你的评论并提交它作为答案。你已经触及了OP代码中大部分错误的事情,所以你应该得到“接受的答案”的代表点。 –
我同意100%。谢谢rmaddy。如果您将此作为答案提交,我会很乐意检查该框。 – RDSpinz