عن طريق النوم في تطبيقات آي فون (خاصة مع UINavigationController)

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

سؤال

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

وحين أداء OK باستخدام جهاز محاكاة (ضرب الحية DB) عمليات البحث التي تعتمد على استدعاء خدمة الإنترنت قد يستغرق وقتا أطول مما كنت قد أعربوا عن أملهم أن عند تشغيل الهاتف. هذه الدعوات تبدو أسوأ بكثير بالمقارنة مع عمليات البحث المحلية التي هي لحظية. لتقليص الفارق النسبي أردت أن أضع في فراغي وهمية (صفحة مع مؤشر النشاط) للبحث الأصلي (عمليات البحث خدمة الإنترنت بالفعل استخدام واحد) ولكن لقد كان لديها مشكلة مع توقيت تحكم الملاحة يدفع عندما يقترن النوم (ن).

وعلى أي حال، قسم البحث على تطبيقي هو navController wihin علامة تبويب tabController. عند محاولة استخدام رمز مثل هذا:

[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES];
sleep(2);

وأجد أن دفع ينتظر دائما للنوم لإنهاء قبل تنفيذ عندما تأثير ما أريده هو لviewcontroller أن دفعت ثم التطبيق إلى الانتظار لمدة ثانيتين قبل المتابعة لمحاكاة عملية البحث.

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

وأنا متأكد من أن هناك عدم فهم أساسي من جهتي اللوم لذلك أنا تأمل في الحصول على القليل من التوجيه هنا.

وابتهاج،

وألان.

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

المحلول

وكتل sleep(float) الخيط الرئيسي مما تسبب في واجهة المستخدم لتجميد يصل. يجب عليك بدلا من ذلك جدولة بعض الإجراءات التي يتعين القيام بها في وقت لاحق باستخدام <لأ href = "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/ instm / NSObject / performSelector: withObject: afterDelay: "يختلط =" نوفولو noreferrer "> -[NSObject performSelector:withObject:afterDelay:]

مثال:

[label performSelector:@selector(setText:) withObject:@"Delayed Hello World!" afterDelay:2.0f];

نصائح أخرى

وأود أن ننظر إلى تغيير بنية وعدم النوم على الترابط الرئيسي - ليست تجربة ممتازة للمستخدم

والنظر في استخدام NSOperation للسيطرة على تعاملك مع خدمة الإنترنت - وهذا سوف يسمح لك ليصطف العمليات، ويكون لهم تشغيل في تسلسل معين أو بالتوازي

وNSOperation هو وسيلة سهلة للغاية لتوفير عمليات خيوط قوية - وكنت قد اخترت لإجراء مكالمة إلى موضوع الرئيسي مع أي التحديثات التي تريد القيام به على طول الطريق

وأعتقد أن هذه العمارة تساعدك على جعل واجهة المستخدم أفضل بكثير - ولكن بمجرد أن إعادة تكوين التفكير لاستخدام العمليات سوف تجد الكثير من المزايا الأخرى.

ملاحظة: استغرق الأمر مني عدة مرات للحصول حقا على السيطرة على NSOperation وNSOperationQueue - ولكن كان الوقت الذي استثمرت بالتأكيد يستحق ذلك

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