2013-01-16 15 views
5

Sto provando a creare una stringa da Array.Ma ci sono le condizioni per come dovrebbe essere generato, come spiegato di seguito.NSString da NSArray

NSArray *array=[NSArray arrayWithObjects:@"Hello",@"World",nil]; 
[array componentsJoinedByString:@","]; 

In uscita: Ciao, Mondo.

Ma, se il primo elemento è vuoto, c'è modo di ricevere l'unico secondo.

  1. Ciao, @ "" => Ciao
  2. @ "", Mondo => Mondo
  3. Ciao, Mondo => Ciao, Mondo
+1

Non si può mettere nulla in un 'NSArray', vuoi dire qualcosa del tipo' @ [@ "", "Mondo"] '' dovrebbe cedere @ "Mondo" 'invece di ' " mondo"'. –

+0

@CarlVeazey suo @ "", non è nulla. Grazie. – andyPaul

risposta

13

Un altro modo per eseguire questa operazione è prendere una copia mutabile dell'array e rimuovere solo oggetti non validi. Qualcosa di simile, forse:

NSMutableArray *array = [[NSArray arrayWithObjects:@"",@"World",nil] mutableCopy]; 
[array removeObject:@""]; // Remove empty strings 
[array removeObject:[NSNull null]]; // Or nulls maybe 

NSLog(@"%@", [array componentsJoinedByString:@","]); 
+0

@bbum No. Rimuoverà qualsiasi oggetto. Solo [controlla i documenti] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html) o prova il codice ... prima di downvotare . – Alladinian

+0

@bbum funziona e rimuove tutto @ "". – andyPaul

+0

Herp de derp .... ci vai. Penseresti che lo saprei dall'utilizzo di NSArray dal 1994 (modifica in modo che potessi fare l'upvoting). – bbum

4

Non è possibile memorizzare nil valori in NSArray*, quindi la risposta è "no". È necessario iterare l'array da solo, tenendo traccia di se è necessario aggiungere una virgola o meno.

NSMutableString *res = [NSMutableString string]; 
BOOL first = YES; 
for(id item in array) { 
    if (id == [NSNull null]) continue; 
    // You can optionally check for item to be an empty string here 
    if (!first) { 
     [res appendString:@", "]; 
    } else { 
     first = NO; 
    } 
    [res appendFormat:@"%@", item]; 
} 


* nil valori collezioni NS sono rappresentati con NSNull oggetti.