Question

J'ai l'erreur - [NSCFString stringValue]: sélecteur non reconnu envoyé à l'instance 0x1578c lors de l'exécution de ce code Je ne comprends pas ce que je fais mal le nom est un NSString

self.searchValues= [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
   [searchValues addObject: [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Name",@"Label",self.name,@"Value",nil]];
NSLog(@"Array value : %s",[[[searchValues objectAtIndex:0] objectForKey:@"Value"] stringValue]);
Était-ce utile?

La solution

Tout d'abord, vous pouvez supprimer le message [... stringValue]. Ce n'est pas nécessaire, cet objet est déjà une chaîne. Deuxièmement, vous devez utiliser% @ au lieu de% s pour les objets NSString.

Remarque:% @ fonctionne pour n'importe quel objet, d'ailleurs. Essayez

NSLog(@"Array: %@", searchValues);

Croyez-moi, ça vaut le coup d'essayer.

Autres conseils

Il n'y a pas de "chaîneValeur". méthode sur NSString, donc l'erreur.

Si vous voulez vraiment que la valeur soit une chaîne de caractères, la méthode que vous voulez est UTF8String. Cependant, pour votre cas de journalisation, vous devez simplement changer% s en% @ et enregistrer directement l'objet NSString.

Il n'est pas nécessaire d'utiliser stringValue dans ce cas ( modifier: , il s'agit en fait d'une erreur, comme d'autres l'ont déjà signalée, car NSString n'a pas de méthode stringValue ).

L'objet qui sort de votre dictionnaire est déjà un NSString . Ce que vous devez faire est d’autoriser la fonction NSLog à traiter l’objet en tant qu’objet cacao approprié. Le code correspondant est % @ et non % s , car % s est destiné aux chaînes de style C.

Voici à quoi cela devrait ressembler:

self.searchValues = [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
{
    [searchValues addObject: [NSMutableDictionary
           dictionaryWithObjectsAndKeys:@"Name", @"Label",
                                        self.name,@"Value",
                                       nil]];

    NSLog(@"Array value: %@", [[searchValues objectAtIndex:0]
                                 objectForKey:@"Value"]);
}

Si vous avez une propriété pour la variable nom, utilisez self.name lorsque vous effectuez une opération, sinon la déclaration de propriété n'a pas de sens.

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