En synchronisant les données de mon site Web avec mon application, j'utilise NSXMLParser pour ce faire. Le problème est que tous les champs de ma base de données sont définis en tant que chaînes. Le processus de synchronisation fonctionne correctement quand tout est une chaîne de caractères, mais cela me cause plus de chagrin quand j'essaie d'utiliser ces données à d'autres fins.Types de données et XMLParser
Quelqu'un peut-il me aider à définir mes champs avec les types de données correctes pour le processus de synchronisation, le code ci-dessous:
.m
// Array for WORKOUT.
NSMutableString *currentID, *currentUserID, *currentWalkID, *currentDate, *currentDistance, *currentRepeats, *currentType, *currentIntensity,
*currentComments, *currentTime, *currentWeight, *currentHeight;
Je sais que quelque chose à voir avec ce NSMutableString, évidemment tout est défini comme une chaîne.
.h
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
currentElement = [elementName copy];
// Check for the WORKOUT details in the XML feed.
if ([elementName isEqualToString:@"workout"])
{
// clear out our workout item caches...
item = [[NSMutableDictionary alloc] init];
currentID = [[NSMutableString alloc] init];
currentUserID = [[NSMutableString alloc] init];
currentWalkID = [[NSMutableString alloc] init];
currentDate = [[NSMutableString alloc] init];
currentDistance = [[NSMutableString alloc] init];
currentRepeats = [[NSMutableString alloc] init];
currentType = [[NSMutableString alloc] init];
currentIntensity = [[NSMutableString alloc] init];
currentComments = [[NSMutableString alloc] init];
currentTime = [[NSMutableString alloc] init];
currentWeight = [[NSMutableString alloc] init];
currentHeight = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"workout"])
{
Workout *newWorkout = [NSEntityDescription insertNewObjectForEntityForName:@"Workout" inManagedObjectContext: self.managedObjectContext];
// save values to an item, then store that item into the array...
[item setObject:currentID forKey:@"workout_id"];
[item setObject:currentUserID forKey:@"workout_user_id"];
[item setObject:currentWalkID forKey:@"workout_walk_id"];
[item setObject:currentDate forKey:@"workout_date"];
[item setObject:currentDistance forKey:@"workout_distance"];
[item setObject:currentRepeats forKey:@"workout_repeats"];
[item setObject:currentType forKey:@"workout_type"];
[item setObject:currentIntensity forKey:@"workout_intensity"];
[item setObject:currentComments forKey:@"workout_comments"];
[item setObject:currentTime forKey:@"workout_time"];
[item setObject:currentWeight forKey:@"workout_weight"];
[item setObject:currentHeight forKey:@"workout_height"];
newWorkout.workout_id = currentID;
newWorkout.workout_user_id = currentUserID;
newWorkout.workout_walk_id = currentWalkID;
newWorkout.workout_date = currentDate;
newWorkout.workout_distance = currentDistance;
newWorkout.workout_repeats = currentRepeats;
newWorkout.workout_type = currentType;
newWorkout.workout_intensity = currentIntensity;
newWorkout.workout_comments = currentComments;
newWorkout.workout_time = currentTime;
newWorkout.workout_weight = currentWeight;
newWorkout.workout_height = currentHeight;
[self.workoutArray addObject:newWorkout];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
// save the characters for the current item...
if ([currentElement isEqualToString:@"workout_id"]) {
[currentID appendString:string];
} else if ([currentElement isEqualToString:@"workout_user_id"]) {
[currentUserID appendString:string];
} else if ([currentElement isEqualToString:@"workout_walk_id"]) {
[currentWalkID appendString:string];
} else if ([currentElement isEqualToString:@"workout_date"]) {
[currentDate appendString:string];
} else if ([currentElement isEqualToString:@"workout_distance"]) {
[currentDistance appendString:string];
} else if ([currentElement isEqualToString:@"workout_repeats"]) {
[currentRepeats appendString:string];
} else if ([currentElement isEqualToString:@"workout_type"]) {
[currentType appendString:string];
} else if ([currentElement isEqualToString:@"workout_intensity"]) {
[currentIntensity appendString:string];
} else if ([currentElement isEqualToString:@"workout_comments"]) {
[currentComments appendString:string];
} else if ([currentElement isEqualToString:@"workout_time"]) {
[currentTime appendString:string];
} else if ([currentElement isEqualToString:@"workout_weight"]) {
[currentWeight appendString:string];
} else if ([currentElement isEqualToString:@"workout_height"]) {
[currentHeight appendString:string];
}
Il est un peu difficile de répondre à votre question sans connaître l'entité d'entraînement. S'il vous plaît dites-nous quels champs ont quel type. En outre, il me semble que vous fuyez le dictionnaire de l'article et toutes vos chaînes mutables. Vous devriez libérer l'ancien objet, avant d'en assigner un nouveau. – tonklon
Tous les champs de l'entité d'entraînement sont NSString. – Stephen
Je ne comprends pas votre question alors. Si vous avez besoin d'autres types, modifiez la définition de votre entité. Voulez-vous savoir comment convertir une chaîne en un type différent ??? – tonklon