2013-01-16 16 views
5

Próbuję utworzyć ciąg z Array.Ale istnieje warunek, w jaki sposób powinno być generowane, jak wyjaśniono poniżej.NSString z NSArray

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

To wyświetli: Witaj, Świat.

Ale jeśli pierwszy element jest pusty, to czy istnieje sposób na otrzymanie tylko drugiego.

  1. Witam, @ "" => Witam
  2. @ "" Świat => Świat
  3. Hello, World => Hello, World
+1

nie można umieścić nil w 'NSArray', masz na myśli coś takiego jak' @ [@ „”, „Świat”] '' @ powinna przynieść „świat” zamiast ' '", Świat "'. –

+0

@CarlVeazey jego @ "", nie zer. Dzięki. – andyPaul

Odpowiedz

13

Innym sposobem wykonania tej czynności jest pobranie zmieniającej się tablicy i usunięcie nieprawidłowych obiektów. Coś takiego może:

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. Usunie wszystkie obiekty. Po prostu [sprawdź dokumenty] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html) lub przetestuj kod ... zanim przejdziesz do oceny . – Alladinian

+0

@bbum to działa i usuwa wszystkie @ "". – andyPaul

+0

Herp de derp .... proszę. Można by pomyśleć, że wiem o tym od korzystania z NSArray od 1994 roku (edycja, abym mógł przegłosować). – bbum

4

Nie można przechowywać nil wartości NSArray*, więc odpowiedź brzmi "nie". Musisz samodzielnie powtórzyć tablicę, sprawdzając, czy musisz dodać przecinek, czy nie.

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 wartości w kolekcji NS są reprezentowane z NSNull obiektów.