2009-11-24 7 views
0

J'ai développé une application iPhone où j'ai besoin de passer un tableau de chaînes au service Web. Maintenant, j'ai un tableau NSMutable, disons sendSelectedID.passer un tableau de chaînes au service Web dans l'iPhone

Je sais que j'ai des valeurs dans le tableau, parce que quand j'affichage dans la boucle for

for(i=0;i<[sendSelectedID count];i++) 
{ 
NSLog(@"%@", [sendSelectedID objectAtindex:i]); 
} 

c'est la façon dont je passe le tableau NSMutable au message Soap:

NSString *soapMessage = [NSString stringWithFormat: 
    @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 
    "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
    "<S:Header/\>\n" 
    "<S:Body>\n" 
    "<ns2:confirmRecallDeposit xmlns:ns2=\"http://services.cbp.syntel.org/\">\n" 
    "<TransactionId>%@</TransactionId>\n" 
    "</ns2:confirmRecallDeposit>\n" 
    "</S:Body>\n" 
    "</S:Envelope>\n",sendSelectedID ]; 

et la un message de savon est affiché comme:

NSString *soapMessage = [NSString stringWithFormat: 
    @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
    "<S:Header/\>\n" 
    "<S:Body>\n" 
    "<ns2:confirmRecallDeposit xmlns:ns2=\"http://services.cbp.syntel.org/\">\n" 
    "<TransactionId>(
     1, 
     3 
    )</TransactionId>\n" 
    "</ns2:confirmRecallDeposit>\n" 
    "</S:Body>\n" 
    "</S:Envelope>\n",sendSelectedID ]; 

Mais du côté du serveur, il donne l'erreur Numb Exception de format. Comment supprimer cette erreur côté serveur? J'ai essayé de réduire les valeurs reçues, mais cela n'a pas fonctionné.

+0

votre question est extrêmement difficile à comprendre. Quel est le problème avec la sortie que vous voyez? Quelle est la sortie désirée? qu'est-ce que 'receib' et 'ved'? à quoi ressemble le code actuel? – si28719e

+1

Vous avez posé 17 questions et vous n'en avez pas marqué un avec la bonne réponse. –

+0

J'ai modifié ma question. – shreedevi

Répondre

0

Ceci est juste une supposition, mais peut-être vous avez besoin d'échapper les retours chariot dans sendSelectedID.

Vous pouvez ajouter la méthode -stringByEscapingMetacharacters à une catégorie NSString (une façon d'étendre les fonctionnalités à NSString):

@implementation NSString (Additions) 

- (NSUInteger) numberOfUnsafeCharacters { 
    NSUInteger i, len, cnt; 

    if ((len = [self length]) == 0) 
     return 0; 

    for (i = 0, cnt = 0; i < len; i++) { 
     unichar c; 

     c = [self characterAtIndex:i]; 
     if (c == ',' || c == ';' || c == '\n' || c == '\\') cnt++; 
    } 
    return cnt; 
} 

- (NSString *) stringByEscapingMetacharacters { 
    NSUInteger i, cnt, len; 
    unichar *newStr; 
    NSString *result; 

    if ((cnt = [self numberOfUnsafeCharacters]) == 0) 
     return self; 

    len = [self length]; 
    newStr = calloc(len + cnt + 10, sizeof(unichar)); 
    for (i = 0, cnt = 0; i < len; i++) { 
     unichar c; 

     c = [self characterAtIndex:i]; 
     if (c == '\\') { 
      newStr[i + cnt] = '\\'; 
      cnt++; 
     } 
     else if (c == '\n') { 
      newStr[i + cnt] = '\\'; 
      cnt++; 
      c = 'n'; 
     } 
     newStr[i + cnt] = c; 
    } 
    newStr[i + cnt] = '\0'; 
    result = [NSString stringWithCharacters:newStr length:(i + cnt)]; 
    if (newStr != NULL) free(newStr); newStr = NULL; 

    return result; 
} 

Ensuite, vous appelez [sendSelectedID stringByEscapingMetacharacters] pour obtenir les éléments suivants NSString*:

(\\n1,\\n3\\n) 

lieu de ce que vous avez maintenant:

(
1, 
3 
) 
Questions connexes