سؤال

أقوم بإنشاء تطبيق iPhone مجمع إلى حد ما باستخدام البيانات الأساسية. حتى الآن، كانت الأمور تعمل بشكل جيد. نظرا لأن التطبيق أصبح أكثر تعقيدا، فقد وصلت مشكلة جديدة: تقوم وحدة تحكم الرؤية الأولى بإنهاء طريقة تحميل ViewDIDID الخاصة بها قبل أن يصبح AppDelegate في منتصف الطريق من خلال طريقة تطبيق ApplicationDIdfinishLaunching.

وحدة التحكم العرضية ليست الجذر، وهو وحدة تحكم شريط التبويب. VC في السؤال هو واحد لعلامة التبويب الافتراضية المحددة في شريط علامة التبويب. انها تحصل مثيل لها بواسطة IB.

لا شيء مثل هذا قد حدث من قبل في تجربتي، ويطرد التهيئة المهمة التي أفعلها في AppDelegate (الحصول على كائنات من البيانات الأساسية وإعدادها للاستخدام). علاوة على ذلك، فإنه متقطع - في بعض الأحيان المندوب هل الانتهاء أولا.

هل لاحظ أي شخص آخر صعوبة مثل هذا؟ أي رمز عينة يتعامل مع مثل هذه المشكلة؟

أفترض أن الجواب هو جعل VC قم بتحميل البيانات التي يستعد فيها AppDelegate إلا عندما يرسل AppDelegate رسالة جاهزة. أنا قلق بعض الشيء من أن هذا يضيف شيئا ما سوف ينتهي بك الأمر إلى عضني بعقب في وقت لاحق.

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

المحلول

الحل الذي أستخدمه لتجنب ظروف السباق مثل هذا هو التخلي عن الإشارة تماما إلى إشراف أي من واجهة المستخدم الوظيفية من التطبيق حتى تم تحميل البيانات والتحقق من صحتها. في الجزء العلوي من بلدي -PlicationDidididfinishLaunching: الطريقة، أقوم بما يلي:

  1. إنشاء UiWindow مع فرعي:
    • uiimageview من default.png مع فرعي:
      • تتركز uiactivityIndicatorView في الإطار (والتحريك)
  2. قم بتعيين مفتاح النافذة والمرئي حتى يحصل المستخدم على ملاحظات مرئية في أقرب وقت ممكن أن بعض الطحنات التي تجري فيها بعض البيانات قبل الأحمال UI.
  3. قم بتحميل جميع بيانات التحميل والتحقق من الصحة (والتي يمكن أن تشمل نشاط الشبكة)
  4. قم بإنشاء وإضافة وجهة نظر UI الرئيسية إلى النافذة كأحلى تصنيف فرعي أسفل عرض Default.png، والتي تلاشى بعد ذلك وإزالتها من Superview.

كيف تقوم بتنفيذ الخطوة 4 (مكالمة تحت الروتينية، الإخطار غير المتزامن، مراقبة القيمة الرئيسية، إلخ ...) متروك لك تماما. ما هو مهم هو فكرة إجراء تحميل أي مكونات UI تحتل عند تحميل أي مكونات البيانات المطلوبة.

يتيح لك ذلك كتابة جميع رمز UI دون القلق بشأن البيانات، وهو ما تريد القيام به في تطبيق MVC على أي حال.

نصائح أخرى

بمجرد الانتهاء من تهيئة مفوض التطبيق، النار NSNotification - هذا سيكون آخر شيء applicationDidFinishLaunching الطريقة سوف تفعل، يفترض.

لدينا نفس المندوب التطبيق يستمع إلى هذا الإخطار ونيران محدد، كما يقول loadViewController, والذي يقوم بعد ذلك بتحميل وحدة تحكم العرض.

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