2010-12-02 19 views
1

Je cherche de l'aide. J'ai essayé de chercher sur ce site et j'ai essayé de modifier mon code, mais je suis coincé. Mon problème est avec l'affichage et la modification d'un attribut entier stocké dans coredata. J'ai une vue de détail qui utilise un UITableView. Il semble afficher l'entier correctement dans la cellule, en utilisant le code suivant:Problème avec le transfert et l'édition d'informations entières stockées dans la coredata

cell.textLabel.text = @"Set target"; 
cell.detailTextLabel.text = [match.set_target stringValue]; 

mais, quand je tente de modifier la valeur en passant à un UITextField sur une vue d'édition, il affiche correctement l'entier (pour l'exemple 3 est affiché en 53916). Je passe la valeur à UITextField avec ce code: (note, editeurObjet est NSManagedObject, numField est UITextField, editeFieldKey est NSString).

[numField setText:[NSString stringWithFormat:@"%d", editedFieldKey]]; 

Les valeurs sont transmises à la vue de l'édition de la vue détaillée en utilisant ce code:

controller.editedFieldKey = @"set_target"; 
controller.editedFieldName = NSLocalizedString(@"Number of sets to win", @"set_legs"); 

je peux afficher, modifier et enregistrer des chaînes et des dates, mais je ne peux pas comprendre Entiers. Toute aide serait appréciée.

EDIT 1

j'enregistrer et annuler les boutons sur mon point de vue de modifier. Le bouton Enregistrer invoque:

- (IBAction)save { 

    // Set the action name for the undo operation. 
    NSUndoManager * undoManager = [[editedObject managedObjectContext] undoManager]; 
    [undoManager setActionName:[NSString stringWithFormat:@"%@", editedFieldName]]; 
    if (editingDate) { 
     [editedObject setValue:dateField.date forKey:editedFieldKey]; 
    } 
    else if (editingNum) { 
     [editedObject setValue: [NSNumber numberWithInteger: [numField.text integerValue]] forKey: editedFieldKey]; 
    } 
    else { 
     [editedObject setValue: textField.text forKey:editedFieldKey]; 
    } 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

Avec le code pour afficher l'entier défini comme:

[numField setText:[NSString stringWithFormat:"%d", [editedObject valueForKey:editedFieldKey]]]; 

J'ai un avertissement au sujet de la ligne: En passant l'argument 1 de 'stringWithFormat' de type pointeur incompatible. En cours d'exécution, il se bloque avec: + [NSString WithFormat:]: sélecteur non reconnu envoyé à la classe 0x211d60'

+0

Voir ma mise à jour de la réponse. – falconcreek

+0

Vous ne transmettez pas de chaîne valide à stringWithFormat. Le symbole @ est manquant avant "% d" – falconcreek

Répondre

1

"editedFieldKey est NSString"

[numField setText:[NSString stringWithFormat:@"%d", editedFieldKey]]; 

remplacer le formatter avec %@

[numField setText:[NSString stringWithFormat:@"%@", editedFieldKey]]; 

EDIT:

Puisque vous n'êtes pas ajouterez quoi que ce soit à la chaîne, le stringWithFormat: un message est inutile. Ce qui suit produira le même résultat.

[numField setText:editedFieldKey]; 

Et pour ceux qui préfèrent '.' la syntaxe de la propriété accesseurs

numField.text = editedFieldKey; 

EDIT 2

Je suppose que vous passez dans votre objet géré et le contexte au contrôleur d'édition ...

Pour afficher la valeur de l'attribut "set_target" de votre objet géré.

[numField setText:[[editedObject valueForKey:editedFieldKey] stringValue]]; // set_target is returned as an NSNumber 
+0

J'ai essayé cela, mais l'UITextfield montre "set_target" qui est le nom de l'attribut, plutôt que la valeur de l'attribut. – lps

+0

alors 'editedFieldKey' n'est pas ce que vous voulez .. – falconcreek

+0

J'ai remarqué que mon editObject n'est pas impliqué? Est-ce le problème? J'ai essayé numField.text = [editObject: [NSString stringWithFormat: @ "% @"] valeurForKey: editedFieldKey]; mais cela plante – lps

2

Vous passez une chaîne à numberWithInteger, quand, au lieu que vous voulez que la valeur entière de la chaîne. Essayez de changer à ceci:

[editedObject setValue: [NSNumber numberWithInteger: [numField.text integerValue]] forKey: editedFieldKey]; . 
+0

Merci pour la réponse. Je viens de me rendre compte que le code que vous avez modifié provenait de ma procédure de sauvegarde et non de la partie d'affichage, mais j'ai mis à jour cela avec votre correction, alors merci pour cela. Le code d'affichage qui me cause des problèmes est: – lps

+0

[numField setText: [NSString stringWithFormat: @ "% d", editedFieldKey]]; – lps