NSPredicate匹配一些单词而不是逐字逐句

时间:2014-04-08 22:40:22

标签: ios objective-c core-data nsstring nspredicate

我从UITextView获取一些文本并使用NSPredicate获取该文本,看它是否与我的数据模型和数据库中的数据匹配。目前我必须逐字输入以查看它是否匹配。我这样使用它:

- (IBAction)viewResults:(id)sender {

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Chapters" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entitydesc];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"theverse CONTAINS[cd] %@",self.textViewVerse.text];
[request setPredicate:predicate];

NSError *error;
NSArray *matchingData = [context executeFetchRequest:request error:&error];

if(matchingData.count <=0)
{
    self.theResults.text = @"NO Verse found";
}
else {
    NSString *theVerse = nil;
    NSString *chapterNumber = nil;
    NSString *chapterName = nil;
    NSString *verseNumber = nil;



    for (NSManagedObject *obj in matchingData){
        theVerse = [obj valueForKey:@"theverse"];
        chapterNumber = [obj valueForKey:@"chapternumber"];
        chapterName = [obj valueForKey:@"chaptername"];
        verseNumber = [obj valueForKey:@"versenumber"];
    }

    self.theResults.text = [NSString stringWithFormat: @"Chapter Name: %@ \n\nChapter Number: %@ \n\nVerse Number: %@ \n\nVerse: %@",chapterName, chapterNumber, verseNumber, theVerse];

}

}

因此,如果我输入“他的财富并且他的孩子不会使他受益”并点击viewResults按钮,它将在数据库中找到该节目并显示其相关细节。但是,如果我输入“他的财富而他的孩子不会使自己受益”,它将显示“没有发现诗歌”。有没有办法我可以查看这节经文,而不必逐字输入或不匹配的单词,仍然能找到我想要找到的内容?

1 个答案:

答案 0 :(得分:0)

您可能希望查看我在detecting combinations of strings

上有类似问题的讨论(尤其是评论)

在您的情况下,您可以将所有相似的字词映射到唯一键,然后搜索键的组合。