2017-10-20 122 views
2

下面是我使用的代码,无论我在设备上使用什么语句,它都不会打印任何内容。在模拟器上它工作正常!NSLinguisticTagger enumerateTagsInRange无法在设备上使用NSLinguisticTagSchemeNameTypeOrLexicalClass

- (NSMutableArray *)getTagEntries:(NSString *)sentence { 
    NSArray<NSLinguisticTagScheme> *tagSchemes = [NSLinguisticTagger availableTagSchemesForLanguage:@"en"]; 
    NSLinguisticTaggerOptions options = NSLinguisticTaggerJoinNames | NSLinguisticTaggerOmitWhitespace; 
    NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagSchemes options:options]; 

    linguisticTagger.string = sentence; 

    __block NSMutableArray *tagEntries = [@[] mutableCopy]; 
    [linguisticTagger enumerateTagsInRange:NSMakeRange(0, sentence.length) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSLinguisticTag tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
    NSString *token = [sentence substringWithRange:tokenRange]; 
    NSLog(@"%@ -> %@", token, tag); 
    [tagEntries addObject:@{@"token":token, @"tag":tag}]; 
    }]; 
    return tagEntries; 
} 

当我尝试在我的iPhone上打印出可用的方案时,Lexical不是一个选项。怎么来的!?

NSArray<NSLinguisticTagScheme> *availSchemes = [NSLinguisticTagger availableTagSchemesForLanguage:@"en"]; 
for (NSLinguisticTagScheme scheme in availSchemes) { 
    NSLog(@"Tag scheme %@", scheme); 
} 
// output: 
// Tag scheme Language 
// Tag scheme Script 
// Tag scheme TokenType 

使用iPhone 6+与iOS 11.

+0

你有没有找到解决方案让它在失败的设备上工作?我发现了同样的问题 –

回答

1

遗憾的是,答案是不断变化的设备。我的iPhone X没有这个问题。这可能是因为拥有6芯和更新的手机拥有的专用ML芯片。

+0

奇怪,因为这个班已经有好几年了;在2012年为我工作。 –

+0

@AlbertRenshaw我有同样的问题..任何想法,为什么计划不“存在”的物理设备? (iPhone 6s iOS 11.2) –

+0

@WillVonUllrich为我工作! –