Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Sqlite和Unicode字符串获取的CoreData无效_Sqlite_Core Data_Unicode_Fetch - Fatal编程技术网

使用Sqlite和Unicode字符串获取的CoreData无效

使用Sqlite和Unicode字符串获取的CoreData无效,sqlite,core-data,unicode,fetch,Sqlite,Core Data,Unicode,Fetch,我有一个应用程序,我正在coredata sqlite数据库中存储日语文本。填充数据似乎工作正常(据我所知),但当我搜索任何字符串字段时,它不会返回任何记录。如果我搜索一个整型字段,它会这样做 字符串数据是unicode(即日文字符),所以我的问题是核心数据不能使用unicode吗?似乎不太可能。为了让搜索(获取)工作,需要做一些特殊的事情吗 填充数据的代码如下所示: WordProgress *newWordProgress = [NSEntityDescription insertNewOb

我有一个应用程序,我正在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 = 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,可能是一个屏幕截图)。在我的原始帖子中添加了代码。谢谢。我想我以前也有过不带“”的帖子,但我将其更改为不带,但仍然不起作用。我也尝试过使用模板进行此操作,但也不起作用:(