我正在编写一本字典应用程序。这个应用程序使用核心数据,我对核心数据非常新。在数据库中,使用名为字典和字典实体的单个实体存储的记录只有两个属性“英语”& “的含义”。
因此,每当用户在UISearchBar
中键入一些字符时,我想从数据库中获取从“a”开始的记录,如果用户键入的数据不是b,我想从“ab”开始获取记录等等。
我正在通过以下代码尝试相同的事情:
// Fetch the devices from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:ENTITY_NAME inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
// retrive the objects with a given value for a certain property
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K beginswith[c] %@",@"English",searchText];
[request setPredicate:predicate];
// Edit the sort key as appropriate.
/*NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"English" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];*/
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
/*NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;*/
NSError *error = nil;
_searchResult = [managedObjectContext executeFetchRequest:request error:&error];
当此代码执行我的应用程序崩溃时出现以下错误消息:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath English not found in entity <NSSQLEntity TamilEnglishDict id=1>'
修改
这就是我的数据模型......
任何能指导我正确获取记录的路径的人都可以吗?
答案 0 :(得分:3)
是的,区分大小写。
所以正确的谓词如下。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K beginswith[c] %@",@"english", searchText];
或只是
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"english beginswith[c] %@", searchText];
但是在托管对象中保存这些值时我写了'[managedObject setValue:[obj objectForKey:@“English”] forKey:@“English”]';
所以现在编辑你的问题并向我解释上面的评论。你的意思是什么?
也许你可以做到
[managedObject setValue:[obj objectForKey:@"English"] forKey:@"english"];
答案 1 :(得分:0)
我看到了你的代码&amp;你的代码是正确的,你只需要改变你正在使用的谓词。只需用谓词替换此代码即可。希望你的问题得到解决。因为你想要包含“ab”或“a”或“b”的结果所以你必须用“包含”来代替“开头”。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@",@"English", searchText];
如果您有任何问题,请告诉我。