Я использую объект NSLinguisticTagger и его метод enumerateTagsInRange: схема: options: usingBlock.Невозможно остановить блок NSLinguisticTagger
Проблемы возникают, когда я использую длинную строку, без разрывов строк, я не могу остановить блок.
Вот мой код, чтобы начать строку и 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;
}
}
];
Что я ожидал это, после того, как я установил * стоп = YES блок остановить его петлю. Но этого не происходит. Блок переходит к другому предложению, но не останавливается. Если строка имеет разрывы строк (\ n) в конце предложений, блок останавливается, как я ожидал (с тем же кодом). Но когда строка имеет разрывы строк, блок вызывает утечку памяти.
Кто-нибудь знает, что происходит, и что я могу попытаться заблокировать работу, как я ожидал?
Метод струнной enumerateSubstringsInRange: Опции: usingBlock: не решить мою проблему в моем действительном решении ... Я хотел бы использовать NSLinguisticTagger ...
Я сделал контакт с Apple, Developer Техническая поддержка с этой проблемой, и они заставили меня зарегистрировать это как ошибку. Поэтому я сделал отчет об ошибке, и я жду ответа. Любые новости Я отредактирую этот пост.
Мне тоже показалось странным ... Это решение разрешает этот случай. Но в моем коде я вызываю эту функцию много раз для одной и той же строки (только с разным диапазоном). Таким образом, если я не останавливаю блок, он идет до конца строки каждый раз, когда я вызываю функцию, и это замедляет приложение. – Yudmt