2012-05-13 43 views
54

當我插入新的對象我下面的代碼做:如何更新核心數據中的現有對象?

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 

Favorits *favorits = [NSEntityDescription insertNewObjectForEntityForName:@"Favorits" inManagedObjectContext:context]; 

favorits.title = @"Some title"; 

NSError *error;      
if (![context save:&error]) { 
    NSLog(@"Whoops"); 
} 

我如何在覈心數據更新現有的對象?

回答

122

更新很簡單,創建一個新的。

要更新,你需要建立一個NSFetchRequest的特定對象。這個類相當於SQL語言中的SELECT語句。

這裏一個簡單的例子:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Favorits" inManagedObjectContext:moc]]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error:&error]; 

// error handling code 

陣列results包含所有包含在源碼文件中的管理對象。如果你想抓住一個特定的對象(或更多的對象),你需要使用該請求的謂詞。例如:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"]; 
[request setPredicate:predicate]; 

在這種情況下results包含其中標題等於Some Title的對象。設置謂詞等於將WHERE子句放入SQL語句中。

如需進一步信息,我建議你閱讀的核心數據編程指南和NSFecthRequest類引用。

希望它能幫助。

編輯(代碼段,可以用來更新)

// maybe some check before, to be sure results is not empty 
Favorits* favoritsGrabbed = [results objectAtIndex:0];  
favoritsGrabbed.title = @"My Title"; 

// save here the context 

,或者如果你沒有使用NSManagedObject子類。

// maybe some check before, to be sure results is not empty 
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0]; 
[favoritsGrabbed setValue:@"My title" forKey:@"title"]; 

// save here the context 

在這兩種情況下,如果你做的背景下save,數據將被更新。

+0

@CroiOS我的例子很簡單,在考慮內存管理並不需要。 –

+0

謝謝。你能不能更新你的文章,並添加示例代碼來更新這個對象,而我已經學會了。我在這裏:收藏* myObject = [array objectAtIndex:0]; .. 下一步是什麼? – CroiOS

+0

@CroiOS我添加了一個編輯。正如我已經評論過的,代碼非常簡單,你需要做一些檢查。這只是爲了指導您在檢索後修改您的託管對象。附:檢查代碼是因爲我手寫的。希望能幫助到你。 –

11

你必須從上下文fetch對象,改變你想要的屬性,然後保存上下文你在你的例子。

+0

好的,我得到的對象,下一步是什麼?例子請參閱。 – CroiOS

+1

@CroiOS您可以按照與初始設置相同的方式更改屬性。你也可以完全一樣地保存它們。 – sosborn

8

我希望這將幫助ü。因爲它適合我。

NSMutableArray *results = [[NSMutableArray alloc]init]; 
int flag=0; 
NSPredicate *pred; 
if (self.txtCourseNo.text.length > 0) { 
    pred = [NSPredicate predicateWithFormat:@"courseno CONTAINS[cd] %@", self.txtCourseNo.text]; 
    flag=1; 
} else { 
    flag=0; 
    NSLog(@"Enter Corect Course number"); 
} 

if (flag == 1) { 

    NSLog(@"predicate: %@",pred); 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"Course"]; 
    [fetchRequest setPredicate:pred]; 
    results = [[self.context executeFetchRequest:fetchRequest error:nil] mutableCopy]; 


    if (results.count > 0) { 
     NSManagedObject* favoritsGrabbed = [results objectAtIndex:0]; 
     [favoritsGrabbed setValue:self.txtCourseName.text forKey:@"coursename"]; 
     [self.context save:nil]; 
     [self showData]; 
    } else { 
     NSLog(@"Enter Corect Course number"); 
    } 



} 
相關問題