Obtenir des valeurs stockées à partir de NSSet qui ont été extraites des données de base pour beaucoup

StackOverflow https://stackoverflow.com//questions/21009466

  •  21-12-2019
  •  | 
  •  

Question

Je suis en fait nouveau dans la programmation iPhone et j'ai réussi à créer une application, mais je n'arrive pas à comprendre comment récupérer les valeurs stockées dans NSSet.J'ai 2 entités dans les données de base liées les unes aux autres.Utilisateurs un à plusieurs vers Scores.L'entité Users a les attributs firsNname et lastName et l'entité Scores a les attributs onTime, wasAbsent et dateIn.Je récupère en utilisant un prédicat basé sur firstName et lastName, puis j'exécute la récupération.La récupération réussit et je peux obtenir les deux entités en un seul appel de récupération.Cependant, je ne parviens pas à obtenir les valeurs de l'entité Scores.Quoi que je fasse, il renvoie toujours l'objet NSSet.Ce que je veux faire, c'est récupérer la valeur booléenne qui a été stockée dans les attributs onTime et wasAbsent et les transmettre à UISwitch.

AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
self.managedObject = delegate.managedObjectContext;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"firstname == %@ AND lastname == %@", @"James", @"Smith"];

NSError *error = nil;
self.scoresArray = [self.managedObject executeFetchRequest:fetchRequest error:&error];

if ([self.scoresArray count]) {

    Student *student = [self.scoresArray objectAtIndex:0];
    NSSet *score = student.scores;
    NSArray *arr = [score allObjects];
    NSLog(@"%@", [arr objectAtIndex:0]);
}

si je peux accéder directement à l'entité Score au lieu d'utiliser NSSet, ce serait idéal de cette façon, je peux la référencer en utilisant une notation par points.Toute aide serait appréciée.Merci

Était-ce utile?

La solution

Utilisez quelque chose comme ce qui suit:

AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = delegate.managedObjectContext;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"firstname == %@ AND lastname == %@", @"James", @"Smith"];

NSError *error = nil;
NSArray *studentArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

for (Student *student in studentArray) {

    Student *student = [self.studentArray objectAtIndex:0];

    NSLog(@" student is %@ %@", student.firstname, student.lastname);

    for (Score *score in student.scores) {
       // Do something with score
      NSLog(@"   score is %@", score);
    }
}

Autres conseils

Parce que Student a une relation à plusieurs avec les scores (et sa propriété est scores), lorsque vous obtenez la valeur de student.scores, il renvoie une collection non ordonnée, qui est NSSet dans Foundation.Vous travaillez donc simplement avec comme vous travaillez avec NSSet et avec les collections en général.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top