检索核心数据数据库中的上次保存属性

时间:2014-06-15 13:06:40

标签: ios database

我对核心数据编程完全陌生!我正在尝试编写一个应用程序,简而言之,就像这样:

用户在视图中有大量数据,这些数据是之前完成的大量计算的结果。在这个特定的“所有结果”视图中,有一个保存数据以供将来参考的选项,为此,要求用户输入标识符(在文本字段中)并按下保存按钮。

要检索已保存的数据,用户需要重新输入标识符并按下加载按钮。

几乎一切都运行良好:数据正在保存和加载......但问题是,当输入标识符并按下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]];
    }
}

1 个答案:

答案 0 :(得分:1)

objects数组包含具有您在谓词中指定的标识符的所有对象。

在您使用的代码中

matches = objects[0];

为您提供第一个保存的对象。

相反,你应该使用

matches = objects.lastObject;

但是,您可能希望重新考虑您的实现,因为唯一标识条目的方法是通过其主键(在您的情况下为标识符),每个保存应该是不同的。