2016-03-22 15 views
0

Ich möchte den ersten Datensatz im NSManagedObject aktualisieren. Was ich hier alle aktualisiere, was ich realisiere, ist, weil ich sie alle auswähle und sie alle unter Verwendung der für aktualisiere, aber wie aktualisiere ich gerade den ersten Rekord?Nur das erste Objekt in NSManagedObject aktualisieren

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"]; 
NSError *errorLoading = nil; 
self.users = [context executeFetchRequest:fetchRequestNext error:& errorLoading]; 
for (NSManagedObject *usersObject in [self users]) 
{ 
    [usersObject setValue:@"*" forKey:@"currentUser"]; 
} 
NSError *error; 
[context save:&error3]; 
} 

Antwort

1

Art wie folgt aus:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"]; 
fetchRequest.fetchLimit = 1; //Fetch only one object (optional) 

NSError *errorLoading = nil; 
NSManagedObject *user = [[context executeFetchRequest:fetchRequestNext error:& errorLoading] firstObject]; 
if (errorLoading) { 
    //handle error 
} 
[user setValue:@"*" forKey:@"currentUser"]; 
NSError *error = nil; 
if (![context save:&error]) { 
    //handle error 
} 

Vor allem, wenn Sie nur ein Objekt benötigen, können Sie die fetchLimit auf 1 gesetzt ist es nicht erforderlich, es ist nur eine kleine Optimierung (it wird CoreData anhalten, nachdem das erste Objekt abgerufen wurde). Dann führen Sie die Anfrage genau so aus, wie Sie es normalerweise tun würden und holen das erste Objekt aus dem resultierenden Array.

+0

Perfekt. Das fetchLimit ist ein neues für mich. Tausend Dank. – RGriffiths

+0

@RichardGriffiths, Gern geschehen! :) – FreeNickname

2

Aus den Ergebnissen (Array) Sie einfach den einen bei Index wählen: 0

NSArray *results = [context executeFetchRequest:fetchRequestNext error:& errorLoading]; 

if (results.count>0) { 
    NSManagedObject *userObject = results[0]; 
    [usersObject setValue:@"*" forKey:@"currentUser"]; 
} 
NSError *saveError = nil; 
[context save:&saveError]; 

Ich hoffe, das

0

Eine weitere Option hilft, ist die Methode Firstobject in NSArray definiert zu verwenden.

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"]; 
NSError *errorLoading = nil; 
NSArray *users = [context executeFetchRequest:fetchRequestNext error:& errorLoading]; 

NSManagedObject *singleUser = [users firstObject]; 
if(singleUser){ 
    [singleUser setValue:@"*" forKey:@"currentUser"]; 
} 

NSError *error; 
if([context save:&error]){ 

} 
Verwandte Themen