2013-04-21 2 views
2

Я использую метод componentsSeparatedByCharactersInSet в Objective C для чтения данных из массива. Он отлично работает, когда мой массив содержит несколько параметров с разделителем, но когда мой массив имеет только один параметр, метод ничего не возвращает. Например:Objective C componentsSeparatedByCharactersInSet

array = [x*y*z]; 

newAray = [array componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"*"]]; 

//returns newArray = [x,y,z] - this is good 

array = [x]; 

newAray = [array componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"*"]]; 

//returns nothing - this is bad 

Есть ли способ, чтобы исправить это, так что второй пример возвратит newArray = [x] без изменения формата первого массива?

+0

Append разделительный символ на конце перед вызовом. –

+1

Проводка реального кода всегда лучше, чем поддельный код. Например, ваша первая строка, безусловно, неверна. – Caleb

ответ

2

«componentsSeparatedByCharactersInSet» является метод, который существует в «NSString», так что для вас, чтобы иметь возможность использовать его, ваш «array» объект должен быть «NSString» объект.

Моим решением было бы добавить категорию в NSString, которая возвращает либо массив компонентов, разделенных символами в строке, либо всю строку, если массив, возвращаемый этим вызовом, пуст (что произойдет, если ничего не соответствует разрешению для отделенных компонентов).

Это то, что категория будет выглядеть на NSString:

@interface NSString (AlwaysReturnSomething) 

- (NSArray *) alwaysReturnSomethingForComponentsSeparatedByCharactersInSet: (NSCharacterSet *) characterSet; 

@end 

@implementation NSString (AlwaysReturnSomething) 

- (NSArray *) alwaysReturnSomethingForComponentsSeparatedByCharactersInSet: (NSCharacterSet *) characterSet 
{ 
    NSArray * arrayToReturn = [self componentsSeparatedByCharactersInSet: characterSet]; 
    if(arrayToReturn == NULL) || ([arrayToReturn count] == 0) 
    { 
     arrayToReturn = [NSArray arrayWithObject: self]; 
    } 
    return(arrayToReturn); 
} 

@end 
+0

Да, я действительно ссылаюсь на определенный индекс в массиве, когда я его использую. Таким образом вы можете использовать его в массиве. – Amendale

Смежные вопросы