2016-02-05 20 views
0

Объект ref_id - это строка/номер в ответе JSON. Тот же код работает большую часть времени. Но иногда он падает (~ менее 5%).Прерывистый сбой: - setObjectForKey: объект не может быть nil (ключ: ref_id)

 NSDictionary *udfDict = nil; 
     if (data) { 
      if ([data length] > 0) { 
       udfDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&serializationError]; 
      } 
     } 

     if (udfDict) { 
      NSString *transactionreason; 
      NSString *refId; 
      if (![CustomUtilities isEmptyOrNull:udfDict[@"ref_id"]]) { 

       refId = udfDict[@"ref_id"]; 
       [dict setObject:refId forKey:@"ref_id"]; 
} 

проблема: Если его не в состоянии из числа обратного приведения к строке, код должен разорвать все time.But тот не крах case.The является прерывистыми и только код перерывами на ~ 5% появлений.

+0

'isEmptyOrNull:' код есть? – Larme

+0

+ (BOOL) isEmptyOrNull: (id) givenString { if (givenString == (id) [NSNull null] || givenString == nil) { return TRUE; else return FALSE; } – Sma3186

ответ

0

Проверьте, не нужны ли данные! = Nil. Но сделайте сами и читателей вашего кода в пользу и напишите if (data! = Nil), а не if (data). Это варварски. То же самое для udfDict. length является свойством, поэтому data.length не [длина данных]. Почему вы читаете изменяемые контейнеры? Это какой-то код, который вы скопировали и не поняли?

Ваш код сработает, если данные JSON - это массив.

Мы не знаем, что такое isEmptyOrNull.

Почему setObject и не dict [@ "ref_id"] = ...?

И я не вижу здесь никаких цифр. В чем проблема?

+0

Код здесь разрывается «[dict setObject: refId forKey: @« ref_id »];" Я не думаю, что проблема заключается в «if (data! = Nil), а не if (data)». В противном случае он выиграл, я пришел к 3-му, если упоминал выше. Также я упоминал об ошибках кода для одной и той же записи (такой же ответ JSON) нередко и не каждый раз. – Sma3186

+0

Перед доступом к dict [@ "ref_id"], я получаю доступ к другому параметру из dict [@ "txn_reason"]. Но код здесь никогда не ломается. – Sma3186