не могу хранить объекты в NSMutableArray - PullRequest
0 голосов
/ 27 октября 2011

У меня есть код, который сканирует и возвращает NSString следующим образом:

NSString *GetText = [[NSString alloc] init];
NSString *ScannedText;
NSScanner *TheScanner = [NSScanner scannerWithString:somLongString];
int start=0;
int index=0;
int ObjectCount;
char c;
for (int i = 0; i < [somLongString length] ; i++) {
    c = [somLongString characterAtIndex:i];
    if (c == '=') {
        start = i+1;
        [TheScanner setScanLocation:start];
        [TheScanner scanUpToString:@"&" intoString:&GetText];
        NSLog( @"%@",GetText);
        [UserValuesObject insertObject:GetText  atIndex:index];
        NSLog(@"%@",[UserValuesObject objectAtIndex:index]);
        index++;
    }
}

Теперь я хочу добавить объект GetText, который я создаю каждый раз, в массив.Когда я пытаюсь напечатать первое:

NSLog(@"%@",GetText); 

, это работает!Но когда я пытаюсь добавить его к объекту, а затем распечатать (для отладки), я получаю null на каждом отпечатке журнала:

NSLog(@"%@",[UserValuesObject objectAtIndex:index]);

какие-либо идеи?

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Возможно, вы не инициализировали свой массив должным образом (или вообще не пытались), попробуйте это (включая улучшения синтаксиса):

NSString *getText = [NSString string];
NSScanner *scanner = [NSScanner scannerWithString:someLongString];
NSUInteger start = 0;
NSUInteger index = 0;
NSMutableArray *userValuesObject = [NSMutableArray array];
//  You should save the length of someLongString before starting the loop 
//   so that each iteration doesn't have to call length to see if i has 
//   reached length yet
for (int i = 0, len = [someLongString length]; i < len; ++i) {
    if ([somLongString characterAtIndex:i] == '=') {
        [scanner setScanLocation:(i + 1)];
        [scanner scanUpToString:@"&" intoString:getText];
        NSLog(@"%@", GetText);
        [userValuesObject insertObject:getText atIndex:index];
        NSLog(@"%@", [userValuesObject objectAtIndex:index]);
        ++index;
    }
}

Из Документы NSMutableArray :

insertObject:atIndex:

Параметры

anObject - Объект, добавляемый в содержимое массива.Это значение не должно быть равно нулю.

Важное замечание: RaisesanNSInvalidArgumentException, если anObject равен nil.

index - Индекс в массиве, в который необходимо вставить anObject.Это значение не должно превышать количество элементов в массиве.

Важное замечание: Вызывает исключение NSRangeException, если индекс превышает число элементов в массиве.

Если индекс уже занят, объекты в индексе и за его пределами сдвигаются путем добавления 1 к их индексам, чтобы освободить место.Обратите внимание, что объекты NSArray не похожи на массивы C.То есть, даже если вы указываете размер при создании массива, указанный размер рассматривается как «подсказка»;фактический размер массива по-прежнему равен 0. Это означает, что вы не можете вставить объект с индексом, превышающим текущий счетчик массива.Например, если массив содержит два объекта, его размер равен 2, поэтому вы можете добавлять объекты с индексами 0, 1 или 2. Индекс 3 недопустим и выходит за пределы;если вы пытаетесь добавить объект с индексом 3 (когда размер массива равен 2), NSMutableArray вызывает исключение.

0 голосов
/ 27 октября 2011

Я предполагаю, что NSMutableArray, UserValuesObject равен nil и, следовательно, не позволяет вам устанавливать какие-либо объекты массива.

Попробуйте проверить, равен ли массив нулю или нет, прежде чем вводить цикл for.

т.е.

if (UserValuesObject == nil) {
    UserValuesObject = [NSMutableArray array];
}
...