2016-03-22 1 views
0

Je souhaite mettre à jour le premier enregistrement dans le NSManagedObject. Ce que j'ai ici met à jour tous ceux que je réalise parce que je les sélectionne tous et les mise à jour tous utilisant le pour mais comment mettre juste à jour le premier enregistrement?Mise à jour uniquement du premier objet dans NSManagedObject

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]; 
} 

Répondre

1

Un peu comme ceci:

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 
} 

Tout d'abord, si vous avez besoin d'un objet, vous pouvez régler le fetchLimit à 1. Il n'est pas nécessaire, il est juste une petite optimisation (il fera arrêter CoreData après avoir récupéré le premier objet). Ensuite, vous exécutez la requête comme vous le feriez normalement et obtenez le premier objet du tableau résultant.

+0

Parfait. Le fetchLimit est un nouveau sur moi. Merci un million. – RGriffiths

+0

@RichardGriffiths, de rien! :) – FreeNickname

2

A partir des résultats (tableau) vous suffit de sélectionner l'un à l'index: 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]; 

J'espère que cette aide

0

Une autre option consiste à utiliser la méthode firstObject définie dans NSArray.

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]){ 

}