2010-10-19 14 views
0

Je suis en train de tester pour voir si une NSString les lettres « PDF », comme les 3 premières lettres:NSString comparaison question

if ([[[profiles stringForKey:@"response"] characterAtIndex:0] isEqualToString:@"P"]) { 
      //TODO 
     } 

J'ai commencé avec cette approche pour voir si je pouvais au moins le réduire à ces chaînes qui commencent par "P", mais je reçois une erreur sur ce qui se lit comme suit: "Type de récepteur non valide" unichar "ET" Cast à pointeur d'entier de taille différente "

Ai-je ces erreurs parce que je utilise la comparaison isEqualToString? Est-ce que cela attache le zéro final à "P"? J'ai essayé d'utiliser la comparaison "==" mais j'obtenais aussi une erreur avec cette méthode.

+0

Eh bien, 'characterAtIndex' ne retourne pas' NSString' mais 'unichar' et ce type n'a probablement pas de méthode' isEqualToString'. Cette question pourrait vous aider: http://stackoverflow.com/questions/1354388/unichar-and-nsstring-how-interchangeable-are-these –

+1

Pas probablement; ce n'est pas le cas. Un 'unichar' est un type primitif et ne peut donc pas avoir de méthodes. Heureusement, 'NSString' a de meilleurs moyens de le faire. –

Répondre

4
if ([profiles hasPrefix:@"PDF"]) { 
    NSLog(@"my string starts with \"PDF\""); 
} 
2

Vous souhaitez utiliser la méthode substringToIndex au lieu de characterAtIndex. characterAtIndex renvoie un unichar qui n'est pas un objet objectif-c auquel isEqualToString peut être envoyé.

Voici quelque chose qui a fonctionné pour moi:

NSString* testString = @"PDFDocument"; 
NSString* subString = [testString substringToIndex:3]; 

if ([subString isEqualToString:@"PDF"] == YES) 
{ 
    NSLog(@"same"); 
} 
+0

Oui, hasPrefix fonctionne aussi. – ericg

+1

+1 sauf que cela échouerait avec les langues à caractères multi-octets. –