gpt4 book ai didi

objective-c - NSMakeRange 的子字符串越界异常

转载 作者:太空狗 更新时间:2023-10-30 03:57:50 25 4
gpt4 key购买 nike

当遍历时,为 NSString 中的每个字母创建一个子字符串,会抛出此异常:

-[__NSCFString substringWithRange:]: Range or index out of bounds

代码:

- (void) analyzeContent:(NSString *)content
{
content = [content uppercaseString];
for (int i = 1; i < content.length; i++) {
NSString *ch = [content substringWithRange:NSMakeRange(i-1, i)]; // <-- exception
}
}

从这里调用:

- (IBAction)analyze:(id)sender
{
if (!self.text) {
NSString *path = [[NSBundle mainBundle] pathForResource:CYPHERTEXT_FILE
ofType:@"txt"];
self.text = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:NULL];
}

[self.progIndicator setHidden:NO];
[self.progIndicator startAnimation:nil];
dispatch_queue_t queue = dispatch_queue_create("queue", 0);
dispatch_async(queue, ^{

[self.analyzer analyzeContent:self.text];

// When finished update UI
dispatch_sync(dispatch_get_main_queue(), ^{
[self.progIndicator setHidden:YES];
[self.progIndicator stopAnimation:nil];
});
});
}

text-属性声明为:@property (copy) NSString *text;

i = 13172content.length = 26344 时抛出异常。

代码在后台线程中运行,但 content 不被任何其他线程访问。

感谢您的帮助!

最佳答案

问题是:

我虽然 NSMakeRange 接受了参数 index-from 和 index-to。它实际上需要 index-from 和子字符串的长度,所以当迭代通过中途标记(见问题)时,它超出了范围。

傻...

关于objective-c - NSMakeRange 的子字符串越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17082227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com