我认为我需要修改此方法以返回由completionHandler提供的变量 - 任何正文我知道如何以正确的方式执行此操作?
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@", [self getLanguageOfText:content]);
});
- (NSString *)getLanguageOfText:(NSString *)fewSentences {
__block NSString *returnLanguageString = @"Navi";
NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker];
[spellChecker setAutomaticallyIdentifiesLanguages:YES];
NSString *spellCheckText = fewSentences;
[spellChecker requestCheckingOfString:spellCheckText
range:(NSRange) {0, [spellCheckText length] }
types:NSTextCheckingTypeOrthography
options:nil
inSpellDocumentWithTag:0
completionHandler: ^(NSInteger sequenceNumber, NSArray *results, NSOrthography *orthography, NSInteger wordCount) {
//NSLog(@"dominant language = %@", orthography.dominantLanguage);
//language = @"Hi";
NSLog(@"dominant language = %@", orthography.dominantLanguage);
returnLanguageString = orthography.dominantLanguage;
}];
return returnLanguageString;
}
但returnLanguageString总是“Navi”但我想要返回orthography.dominantLanguage。
请注意:我需要使用此方法和NSSpellChecker代码
我上面提到的几句话就像这样,它存储在NSString中:
40
00:02:59.000 --> 00:03:01.000
彼らは私達にメッセージを送った
41
00:03:01.000 --> 00:03:03.000
彼らは彼らが望むものは何でも取ることができる
42
00:03:04.000 --> 00:03:05.000
我々は彼らにメッセージを送信します。
43
00:03:07.000 --> 00:03:09.000
これは私たちの土地である
答案 0 :(得分:1)
您的块正在异步运行。这意味着它在函数返回之前不会完成执行 - 并且返回值不变。
您需要异步处理设置此变量。最简单的方法是使用一个块,例如:
- (void)getLanguageOfText:(NSString *)fewSentences {
NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker];
[spellChecker setAutomaticallyIdentifiesLanguages:YES];
NSString *spellCheckText = fewSentences;
[spellChecker requestCheckingOfString:spellCheckText
range:(NSRange) {0, [spellCheckText length] }
types:NSTextCheckingTypeOrthography
options:nil
inSpellDocumentWithTag:0
completionHandler: ^(NSInteger sequenceNumber, NSArray *results, NSOrthography *orthography, NSInteger wordCount) {
NSString * returnLanguageString = orthography.dominantLanguage;
// handle the result somehow on the main queue
dispatch_async(dispatch_get_main_queue() ^{
[self doSomethingWithResult:returnLanguageString];
});
}];
}