2014-06-15 39 views
0

我完全不熟悉核心数据编程!我试着写一个应用程序,总之,这样的:检索核心数据库中最后保存的属性

用户有很多在视图中的数据,这些数据的结果OS大量的计算之前完成。在这个特定的“全部结果”视图中,可以选择保存数据以供将来参考,为此,用户需要输入标识符(在文本框中)并按保存按钮。

为了检索所保存的数据,则用户重新输入标识符和按加载按钮。

几乎一切都工作得非常好:数据被保存和加载......但问题是,进入标识符和按LOAD按钮时,应用程序加载第一个保存的数据,而不是最后一个!我希望应用程序在按下加载按钮时加载上次保存的数据...我该怎么做?

我很抱歉把这个新手的问​​题来打扰你,但是这是第一次我试图处理核心数据,我真的想知道如何做到这一点!我非常感谢所有能够帮助我的人!

为“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

目的数组包含所有与您在谓词所指定的标识符的对象。

在你的代码使用

matches = objects[0]; 

这是给你的第一个保存的对象。

相反,你应该使用

matches = objects.lastObject; 

然而,你可能要重新考虑您的实现为唯一标识一个条目的方式是通过其主键(在你的情况identificador),这应该是不同的为每个保存。

+0

非常感谢你Vijayts !!!!我认为你是对的......但在我的应用程序中,我无法强制用户输入每次保存的唯一标识符,我的应用程序是关于身体评估,计算BMI,身体脂肪等......而这个“全部结果“视图是评估的所有结果都显示给用户,然后他决定保存或不保存...您知道,标识符是被评估人员的姓名。但是如果用户输入相同的标识符,有没有办法覆盖数据,而不是保存具有相同标识符的另一个“实例”? – Vladimir

+0

对不起弗拉基米尔。我不确定任何这样的方法。此外,如果答案帮助你的问题。请标记为已接受:) –