CoreData使用Sqlite和Unicode字符串获取不起作用

时间:2013-09-03 22:37:05

标签: sqlite core-data unicode fetch

我有一个应用程序,我将日文文本存储在coredata sqlite数据库中。填充数据似乎工作正常(据我所知),但是当我搜索任何字符串字段时,它不返回任何记录。如果我在我的一个整数字段上搜索它。

字符串数据是unicode(即日文字符),所以我的问题是核心数据不适用于Unicode吗?似乎不太可能。是否需要做一些特殊的事情才能使搜索(获取)有效?

填充数据的代码如下所示:

WordProgress *newWordProgress = [NSEntityDescription insertNewObjectForEntityForName:@"WordProgress" inManagedObjectContext:progressContext];
newWordProgress.kanji = kanji;
newWordProgress.kanji = kana;
newWordProgress.senseIndex = [NSNumber numberWithInt:senseIndex];
newWordProgress.skillType = [NSNumber numberWithInt:skillType];

newWordProgress.leitnerDeck = leitnerDeck;
newWordProgress.dateLastShown = lastShownDate;

测试我的提取的代码,如下所示:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"kanji = %@", @"彼"];
NSFetchRequest *testRequest = [[NSFetchRequest alloc] init];
[testRequest setPredicate:pred];
[testRequest setEntity:[NSEntityDescription entityForName:@"WordProgress" inManagedObjectContext:progressContext]];
NSArray *results = [progressContext executeFetchRequest:testRequest error:&error];

但是当我知道记录已填充时,不会返回任何记录。

刚试过这个,甚至这似乎都失败了。我确信我必须做一些根本错误的事情:

WordProgress *newWordProgress = [NSEntityDescription insertNewObjectForEntityForName:@"WordProgress" inManagedObjectContext:progressContext];
newWordProgress.kanji = @"彼";
newWordProgress.kanji = kana;
newWordProgress.senseIndex = [NSNumber numberWithInt:senseIndex];
newWordProgress.skillType = [NSNumber numberWithInt:skillType];

newWordProgress.leitnerDeck = leitnerDeck;
newWordProgress.dateLastShown = lastShownDate;

NSPredicate *pred = [NSPredicate predicateWithFormat:@"kanji = %@", @"彼"];
NSFetchRequest *testRequest = [[NSFetchRequest alloc] init];
[testRequest setPredicate:pred];
[testRequest setEntity:[NSEntityDescription entityForName:@"WordProgress" inManagedObjectContext:progressContext]];
NSArray *results = [progressContext executeFetchRequest:testRequest error:&error];

2 个答案:

答案 0 :(得分:0)

这不是Unicode问题,它会影响任何字符串NSPredicate错误。你有:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"kanji = '%@'", @"彼"];

单引号存在问题。您正在创建一个在数据中查找文字%@的谓词。单引号会阻止@"彼"替换%@。取出单引号,它应该按预期工作:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"kanji = %@", @"彼"];

答案 1 :(得分:0)

我的上帝,我完全是智障,对不起。多做一些游戏,我看到了这条线......

            newWordProgress.kanji = kanji;
            newWordProgress.kanji = kana;

卫生署!它完全覆盖了我的关键领域。它本应该读......

            newWordProgress.kanji = kanji;
            newWordProgress.kana = kana;

感谢回复,伙计们。遗憾!