لماذا يرمي nsnotificationcenter استثناء عندما أطلقه؟
-
28-09-2019 - |
سؤال
هذا ليس سؤالًا بقدر ما يفكر في التفكير - لماذا يلقي nsnotificalcenter استثناء عند إصداره؟ ما زلت جديدًا على تطوير iPhone ، وبالتالي لا أعرف أحواض الكاكاو حتى الآن ، لذلك سيكون من الجيد أن نفهم السبب.
أنا أعين DefaultCenter إلى متغير ، والاتصال addobserver: المحدد: الاسم: كائن ثم إطلاق المتغير السابق ، ولكن الدعوة إلى إخطار الإصدار يعطل التطبيق. أنا لا أفعل أي شيء غريب في الكود ، لذلك سيكون من المثير للاهتمام معرفة سبب قيامه بذلك بالضبط.
أي شخص واجه هذه المشكلة؟
المحلول
من ما أعرفه عن nsnotifcation ، يجب ألا تقوم بتعيين الافتراضي إلى متغير بل تفعل شيئًا مثل:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];
في هذا المقتطف ، اتصل بالمركز الافتراضي وتسجيل الكائن الحالي لرسالة معينة.
ثم لنشر رسالة إلى مركز الإخطار ، يمكنك استخدامه:
[[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];
أستخدم ما سبق في جميع التعليمات البرمجية الخاصة بي وليس لدي أي مشاكل معها.
نصائح أخرى
يجب أن يكون هناك مركز إشعار افتراضي واحد فقط لتطبيقك ، لذلك لا ينبغي لأي من فصولك الاحتفاظ بها أو إطلاقها. لا تريد أن يختفي مركز الإخطار الخاص بك ، أليس كذلك؟
لا أعتقد أنك تملك الكائن ، وبالتالي لا ينبغي إطلاقه.
تذكر NARC: NEW TILOC ، الاحتفاظ ، نسخ. إذا قمت بعمل واحد من هذه ، فيجب عليك إطلاقه.
ليس لك أن تصدر.
تذكر قاعدة NARC-أنت تطلق فقط الأشياء التي جلبتها إلى الوجود باستخدام:
تخصيص جديد ، أو نسخ.
نارك. نرى؟
ما تفعله مع NSNotificationCenter هو أنك تحصل على نسخة من المفرد الذي يمثل مركز الإخطار الافتراضي. سوف يستحق القراءة على المفردات.