2016-02-05 2 views
0

L'objet REF_ID est une chaîne/nombre dans la réponse JSON. Le même code fonctionne la plupart du temps. Mais parfois, il se bloque (~ moins de 5%).intermittent crash: - setObjectForKey: objet ne peut pas être nulle (clé: 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"]; 
} 

Préoccupation: Si ce ne est pas en mesure de downcaster du numéro à la chaîne, le code doit briser tous les time.But thats pas l'accident case.The est pauses de code intermittents et seulement pour 5% ~ occurences.

+0

'isEmptyOrNull:' le code est? – Larme

+0

+ (BOOL) isEmptyOrNull: (id) givenString { if (givenString == (id) [NSNulle nulle] || givenString == nil) { return TRUE; sinon, retourne FALSE; } – Sma3186

Répondre

0

Le test si les données! = Nil est inutile. Mais faites-vous plaisir, ainsi qu'aux lecteurs de votre code, et écrivez if (data! = Nil) et non if (data). C'est barbare. Idem pour udfDict. length est une propriété, donc data.length non [longueur des données]. Pourquoi lisez-vous des contenants mutables? Est-ce un code que vous avez copié et que vous n'avez pas compris?

Votre code se bloquera si les données JSON sont un tableau.

Nous ne savons pas ce que fait isEmptyOrNull.

Pourquoi setObject et non dict [@ "REF_ID"] = ...?

Et je ne vois aucun chiffre ici. Quel est le problème réel?

+0

Le code se brise ici "[dict setObject: refId forKey: @" ref_id "];" Je ne pense pas que le problème soit dans "if (data! = Nil) et pas if (data)". Sinon, il a gagné, t venir à la 3ème déclaration If ..else mentionné ci-dessus. J'ai également mentionné le code se bloque pour le même enregistrement (même réponse JSON) intemittently et pas à chaque fois. – Sma3186

+0

Avant d'accéder à dict [@ "ref_id"], j'accède à un autre paramètre de dict [@ "txn_reason"]. Mais le code ne casse jamais ici. – Sma3186