使用Sqlite和Unicode字符串获取的CoreData无效
我有一个应用程序,我正在coredata sqlite数据库中存储日语文本。填充数据似乎工作正常(据我所知),但当我搜索任何字符串字段时,它不会返回任何记录。如果我搜索一个整型字段,它会这样做 字符串数据是unicode(即日文字符),所以我的问题是核心数据不能使用unicode吗?似乎不太可能。为了让搜索(获取)工作,需要做一些特殊的事情吗 填充数据的代码如下所示:使用Sqlite和Unicode字符串获取的CoreData无效,sqlite,core-data,unicode,fetch,Sqlite,Core Data,Unicode,Fetch,我有一个应用程序,我正在coredata sqlite数据库中存储日语文本。填充数据似乎工作正常(据我所知),但当我搜索任何字符串字段时,它不会返回任何记录。如果我搜索一个整型字段,它会这样做 字符串数据是unicode(即日文字符),所以我的问题是核心数据不能使用unicode吗?似乎不太可能。为了让搜索(获取)工作,需要做一些特殊的事情吗 填充数据的代码如下所示: WordProgress *newWordProgress = [NSEntityDescription insertNewOb
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 = 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];
这不是Unicode问题,这是一个会影响任何字符串的
NSPredicate
错误。你有:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"kanji = '%@'", @"彼"];
这里的单引号就是问题所在。您正在创建一个谓词,该谓词在数据中查找文本%@
。单引号防止替换@”彼"
用于%@
。去掉单引号,它应该可以正常工作:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"kanji = %@", @"彼"];
我的天啊,对不起,我完全是个智障。我又玩了一会儿,看到台词了
newWordProgress.kanji = kanji;
newWordProgress.kanji = kana;
Doh!它完全覆盖了我的密钥字段。它应该读
newWordProgress.kanji = kanji;
newWordProgress.kana = kana;
感谢各位的回复。对不起!它应该可以处理Unicode,但这并不意味着它没有bug。你能发布一些示例代码来演示这个问题吗?(如果StackOverflow不能处理Unicode,可能是一个屏幕截图)。在我的原始帖子中添加了代码。谢谢。我想我以前也有过不带“”的帖子,但我将其更改为不带,但仍然不起作用。我也尝试过使用模板进行此操作,但也不起作用:(