我对核心数据编程完全陌生!我正在尝试编写一个应用程序,简而言之,就像这样:
用户在视图中有大量数据,这些数据是之前完成的大量计算的结果。在这个特定的“所有结果”视图中,有一个保存数据以供将来参考的选项,为此,要求用户输入标识符(在文本字段中)并按下保存按钮。
要检索已保存的数据,用户需要重新输入标识符并按下加载按钮。
几乎一切都运行良好:数据正在保存和加载......但问题是,当输入标识符并按下LOAD按钮时,应用程序会加载第一个保存的数据,而不是最后一个!我希望应用程序在按下加载按钮时加载上次保存的数据...我该怎么做?
我很抱歉打扰你这个新手问题,但这是我第一次尝试处理Core Data,我真的想知道如何做到这一点!我非常感谢能帮助我的每个人!
“LOAD”按钮的代码是:
- (IBAction)loadData:(id)sender
{
[_identificador resignFirstResponder];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"English"
inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(identificador = %@)", _identificador.text];
[request setPredicate:pred];
NSManagedObject *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request
error:&error];
if ([objects count] == 0)
{
_status.text = @"No matches";
}
else
{
matches = objects[0];
_dataAtualEng.text = [matches valueForKey:@"dataRCQ"];
_rcqEng.text = [matches valueForKey:@"rcq"];
_status.text = [NSString stringWithFormat: @"%lu matches found", (unsigned long)[objects count]];
}
}
答案 0 :(得分:1)
objects数组包含具有您在谓词中指定的标识符的所有对象。
在您使用的代码中
matches = objects[0];
为您提供第一个保存的对象。
相反,你应该使用
matches = objects.lastObject;
但是,您可能希望重新考虑您的实现,因为唯一标识条目的方法是通过其主键(在您的情况下为标识符),每个保存应该是不同的。