Сбой NSDictionary to NSMutableArray - PullRequest
       20

Сбой NSDictionary to NSMutableArray

0 голосов
/ 09 января 2019

Код ниже берет значения из NSMutableArray, берет значения из объекта, а затем добавляет их в другой NSMutableArray для использования. Что мне нужно сделать, это добавить новую строку для каждого элемента в NSMutableArray *options, но он вылетает, говоря:

[__NSSingleObjectArrayI length]: нераспознанный селектор отправлен в экземпляр

Если я закомментирую код в for (int i = 0; i < options.count; i++) и просто оставлю NSLog(@"FIELD), он покажет правильные значения. Есть идеи?

LFFormSectionLabel *sectionLabel = [LFFormSectionLabel new];
[sectionLabel addValue:header forSEL:@selector(setText:)];
[vc addSection:sectionLabel];

NSMutableArray *options = [[NSMutableArray alloc] init];
for (NSDictionary *item in self.surveydata) {
    NSString *addressfield = [item objectForKey:@"address_option"];
    [options addObject:addressfield];
}

for (int i = 0; i < options.count; i++) {
    NSString *field = [options objectAtIndex:i];
    LFFormRowTextField *rowTextField = [LFFormRowTextField new];
    rowTextField.key = @"name";
    [rowTextField addValue:field forSEL:@selector(setPlaceholder:)];
    [sectionLabel addRow:rowTextField];

    NSLog(@"FIELD: %@", field);
}

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Это на самом деле не ответ, а просто чтобы помочь вам отладить. NSLog отлично подходит для отладки кода. Добавьте следующий NSLog в эти строки и убедитесь сами.

NSMutableArray *options = [[NSMutableArray alloc] init];
for (NSDictionary *item in self.surveydata) {
    NSString *addressfield = [item objectForKey:@"address_option"];
    NSLog("addressfield :%@",addressfield); // HERE
    [options addObject:addressfield];
}
NSLog("options:%@",options);// HERE

for (int i = 0; i < options.count; i++) {
    NSString *field = [options objectAtIndex:i];
    LFFormRowTextField *rowTextField = [LFFormRowTextField new];
    rowTextField.key = @"name";
    [rowTextField addValue:field forSEL:@selector(setPlaceholder:)];
    [sectionLabel addRow:rowTextField];

    NSLog(@"FIELD: %@", field);
}

Ваш код имеет несколько ловушек. Например, что если поле адреса не возвращает NSString, вместо этого оно возвращает NULL или NSNumber или другие? Хорошей практикой является всегда проверять ТИП объекта, возвращаемого из objectForKey, перед его присвоением. Если вы не можете гарантировать, что данные содержат только строку. Если это из стороннего веб-API, тогда я могу почти сказать, что всякая ерунда будет отправлена. : D Удачи.

0 голосов
/ 09 января 2019

Скорее всего, объекты в вашем массиве вообще не являются NSStrings, это NSArrays, содержащие NSString. Попробуйте остановиться в отладчике после вызова objectAtIndex и распечатать [поле класса]

...