هل يمكنني الحصول على أفنيتوركينغ لتحليل تلقائيا فارغة إلى لا شيء?

StackOverflow https://stackoverflow.com//questions/10694404

  •  12-12-2019
  •  | 
  •  

سؤال

نحن نستخدم أفنيتوركينغ في التطبيق المحمول لدينا والكثير من الأوقات سيكون لدينا جسون يعود التي لديها فارغة لبعض القيم.

لقد سئمت من القيام بما يلي.

if ([json objectForKey:@"nickname"] isKindOfClass:[NSNull class]]) {
    nickname = nil;
} else {
    nickname = [json objectForKey:@"nickname"];
}

أي شيء يمكننا القيام به لجعل أفنيتوركينغ تلقائيا تعيين الكائنات إلى لا شيء أو أرقام إلى 0 إذا كانت القيمة فارغة في استجابة جسون?

هل كانت مفيدة؟

المحلول

هذا غير ممكن حقا ، لأن القاموس لا يمكن أن يحتوي على nil كما الكائن للحصول على مفتاح.يجب ترك المفتاح بالكامل من أجل الحصول على السلوك الذي تريده ، والذي سيكون غير مرغوب فيه بطريقته الخاصة.

لنفترض أنك لم يكن لديك السيطرة على البيانات التي كنت تتلقى ولم أكن أعرف ما هي المفاتيح الموجودة في جسون.إذا كنت تريد سردها جميعا ، أو عرضها في جدول ، وتم ترك مفاتيح الكائنات الفارغة خارج القاموس ، فسترى قائمة غير صحيحة.

NSNull هو العنصر النائب "لا شيء" لمجموعات الكاكاو ، ولهذا السبب يتم استخدامه في هذه الحالة.

هل يمكن أن تجعل الكتابة أسهل قليلا مع ماكرو:

#define nilOrJSONObjectForKey(JSON_, KEY_) [[JSON_ objectForKey:KEY_] isKindOfClass:[NSNull class]] ? nil : [JSON_ objectForKey:KEY_]

nickname = nilOrJSONObjectForKey(json, @"nickname");

نصائح أخرى

يمكنك تعيين flag setremoveskeyswithnullvalues إلى نعم في AfhttpsessionManager الاستجابة الاستجابة:

giveacodicetagpre.

أجب DV_ يعمل بشكل رائع ل AfhttpessessionManager.ولكن إذا كنت تستخدم AFHTPRECTOTERONESTOPERON بدلا من المدير، فجرب هذا:

giveacodicetagpre.

هناك واحد cocoapod واحد يسمى مفروم https://github.com/hyperoslo/minced يمكن أنافعل شيئا يمكنه مساعدتك في التعامل مع NULL من استجابة JSON.بدلا من null يضع سلسلة فارغة.

إذا قمت باستبدال nsjsonserialization الافتراضي مع SBJSON، فستحل مشكلتك.

sbjson يجعل الكائنات لا شيء بدلا من اختيار nsjsonserialization من "null"

انظر إلى متطلبات محلل JSON المختلفة التي يمكنك استخدامها. https://github.com/afntworking/afnetworking#requirements

يمكنك عرف afnetworking في هذه الوظائف.قم بتعيين أي قيمة افتراضية للكائنات التي هي فارغة

giveacodicetagpre.

}

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top