私は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を使用したい...
この問題についてAppleDeveloperテクニカルサポートに連絡したところ、バグとして登録するように指示されました。そこでバグレポートを作成し、回答を待っています。この投稿を編集するニュースがあります。