Второй объект каждой пары должен быть ненулевым.Или вы забыли завершить список параметров?при добавлении количества строк - PullRequest
0 голосов
/ 28 сентября 2018

Я получаю исключение:

'NSInvalidArgumentException', причина: '+ [NSDictionary dictionaryWithObjectsAndKeys:]: второй объект каждой пары должен быть ненулевым.Или вы забыли завершить список параметров на ноль? '

В этом коде:

if ([[questionaireDic objectForKey:@"Answer6Option"] boolValue]) {
    NSArray *ans6Arr = [subQuestionaireArr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"QuestionNo = 6 AND SortOrder = 1"]];
    int rowCount = 1;
    for (int i =0;i<ans6Arr.count ; i++) {
        NSDictionary *ans6Dic = ans6Arr[ i];
        NSDictionary *answer6Row1Cell1TextDic = [NSDictionary dictionaryWithObjectsAndKeys:@"810-L50-%d",rowCount,@"DataId",[ans6Dic objectForKey:@"Cell1Text"],@"Value", nil];
        [questionaireArr addObject:answer6Row1Cell1TextDic];

        NSDictionary *answer6Row1Cell2DateDic = [NSDictionary dictionaryWithObjectsAndKeys:@"820-L50-%d",rowCount,@"DataId",[ans6Dic objectForKey:@"Cell2Date"],@"Value", nil];
        [questionaireArr addObject:answer6Row1Cell2DateDic];

        NSDictionary *answer6Row1Cell3NumberDic = [NSDictionary dictionaryWithObjectsAndKeys:@"830-L50-%d",rowCount,@"DataId",[ans6Dic objectForKey:@"Cell3Number"],@"Value", nil];
        [questionaireArr addObject:answer6Row1Cell3NumberDic];

        if (![[ans6Dic objectForKey:@"Cell4Number"] isKindOfClass:[NSNull class]]) {
            NSDictionary *answer6Row1Cell4NumberDic = [NSDictionary dictionaryWithObjectsAndKeys:@"840-L50-%d",rowCount,@"DataId",[ans6Dic objectForKey:@"Cell4Number"],@"Value", nil];
            [questionaireArr addObject:answer6Row1Cell4NumberDic];
        }
        rowCount++;
    }

Я пробовал исправления в Второй объект каждой парыдолжен быть ненулевым и Второй объект каждой пары должен быть ненулевым . И несколько примеров. Но ничего из этого не помогло

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Это исключение возникает из-за строки с указателем формата.Вы должны заключить оба значения @ "810-L50-% d", rowCount в одну строку.В противном случае для значения ключа rowCount . *1006*.

требуется @ "810-L50-% d" . Таким образом, ключ и значение следует изменить на

NSDictionary *answer6Row1Cell1TextDic = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"810-L50-%d",rowCount], @"DataId",[ans6Dic objectForKey:@"Cell1Text"],@"Value", nil];
0 голосов
/ 28 сентября 2018

Вы, похоже, пытаетесь создать строку из формата @810-L50-%d и значения rowCount * без фактического вызова метода форматирования строки для этого.Из-за этого ваш список значений и ключей теряет синхронизацию, и компилятор сообщает об ошибке, относящейся к nil.

. Переключение на современный синтаксис и исправление этого дает:

NSDictionary *answer6Row1Cell1TextDic =
   @{ @"DataId" : [NSString stringWithFormat:@"810-L50-%d",rowCount],
      @"Value" : ans6Dic[@"Cell1Text"]
    };

Синтаксис @{ ... } представляет собой литерал словаря и содержит ноль или более пар <key> : <value>.ans6Dic[@"Cell1Text"] - это словарь индексации , который ищет значение, соответствующее ключу.

HTH

0 голосов
/ 28 сентября 2018

Я считаю, что иногда может помочь переформатировать код для удобочитаемости ...

Если вы измените эту строку:

NSDictionary *answer6Row1Cell1TextDic = [NSDictionary dictionaryWithObjectsAndKeys:@"810-L50-%d",rowCount,@"DataId",[ans6Dic objectForKey:@"Cell1Text"],@"Value", nil];

на:

NSDictionary *answer6Row1Cell1TextDic =
[NSDictionary dictionaryWithObjectsAndKeys:
 @"810-L50-%d", rowCount,
 @"DataId", [ans6Dic objectForKey:@"Cell1Text"],
 @"Value", nil
 ];

Выувидит, что у вас есть nil ключ для объекта "Value" ..., который, я уверен, не был вашим намерением.

Примечание: я думаю, что вы также изменили свои объекты и ключи...

...