Как создать NSArray из неизвестных NSStrings? - PullRequest
1 голос
/ 04 мая 2011

Например, у меня есть @"John", @"Peter", ..., @"May" и мне нужно построить NSArray:

 [@"John", @"Peter", ..., @"May"]

Число NSString неизвестно и берется из текстового файла импорта. Как NSArray не поддерживает добавление нового элемента, как я могу создать NSArray?

Спасибо

ОБНОВЛЕНИЕ, позвольте мне перефразировать вопрос. Как я могу создать paremeter динамического массива, требуемый последующим вызовом функции?

 [segmentedAttributes attributesWithTitlesArray:[NSArray arrayWithObjects:@"John", @"Peter", @"May", nil]]

Ответы [ 3 ]

5 голосов
/ 04 мая 2011

Ты не.

Вы неправильно понимаете поведение библиотеки.

Это правда, что есть удобный конструктор arrayWithObjects:, который используется таким образом:

NSArray* array=[NSArray arrayWithObjects:@"Low", @"Medium", @"High", nil];

Но это делаетне создать массив с nil в конце.Это nil только для обозначения конца списка аргументов переменной длины.Он просто создает NSArray с тремя элементами, а не четыре с последним nil.

Вам просто нужно создать NSArray, содержащий необходимые элементы, и передать его в библиотечную функцию.Например:

NSMutableArray*array=[NSMutableArray array];
while(...){
    ... get a string ...
    [array addObject: string];
}

SCSegmentedAttributes*attributes=[SCSegmentedAttributes attributesWithSegmentTitlesArray:array];

должно работать без добавления nil или [NSNull null].

0 голосов
/ 04 мая 2011

создайте изменяемый массив, затем просто используйте

NSString *myString = [NSString stringWithFormat:@"ur new string"];

[myArray addObject:myString];

, вы должны добавить тип объекта в массив при добавлении нового объекта в изменяемый массив.

надеюсь, это поможет

0 голосов
/ 04 мая 2011

Вы не можете хранить nil в классе коллекции Foundation. Вместо этого вы можете использовать [NSNull null]. Используйте NSMutableArray, затем, когда вы хотите добавить свой объект 'nil', используйте [NSNull null].

Обратите внимание, что когда вы хотите узнать, является ли объект [NSNull null] позже, этот метод будет возвращать один и тот же экземпляр каждый раз, поэтому вы можете выполнить прямой тест на равенство точек, например:

for (id anObject in myArray) {
    if (anObject == [NSNull null]) {
        NSLog(@"object is nil");
    }
    else {
        NSLog(@"object is not nil: %@", anObject);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...