2014-06-15 101 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

對不起弗拉基米爾。我不確定任何這樣的方法。此外,如果答案幫助你的問題。請標記爲已接受:) –