我正在使用 NSLinguisticTagger 对象和他的方法 enumerateTagsInRange:scheme:options:usingBlock。
问题是,当我使用长字符串时,没有换行符,我无法停止该块。
这是我启动字符串和 NSLinguisticTagger 的代码:
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[NSLinguisticTagSchemeTokenType]
options:NSLinguisticTaggerOmitOther | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerOmitWhitespace];
[tagger setString:@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda."];
[tagger enumerateTagsInRange:NSMakeRange(0, [tagger.string length])
scheme:NSLinguisticTagSchemeTokenType
options:NSLinguisticTaggerOmitOther | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerOmitWhitespace
usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop){
NSString *word = [tagger.string substringWithRange:tokenRange];
if ([word compare:@"lamet" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
*stop = YES;
}
}
];
我所期望的是,在我设置 *stop = YES 之后,块停止他的循环。但这并没有发生。块跳转到另一个句子,但没有停止。如果字符串在句子末尾有换行符 (\n),则块会按我的预期停止(使用相同的代码)。但是当字符串有换行符时,该块会导致内存泄漏。
任何人都知道发生了什么,我可以尝试阻止我的工作吗?
string enumerateSubstringsInRange:options:usingBlock: 的方法在我的实际解决方案中没有解决我的问题......我想使用 NSLinguisticTagger...
我就这个问题联系了 Apple 开发者技术支持,他们让我将此注册为错误。所以我做了一个错误报告,我正在等待答案。任何消息我都会编辑这篇文章。