سؤال

لدي تطبيق يستخدم UIWebViews في العديد من وحدات تحكم المشاهدة. ال UIWebViews تستخدم لجعل HTML الذي تم إنشاؤه محليا، ولا يلزم الوصول إلى شبكة بطيئة.

لحفظ الذاكرة، أحملها فقط عند الطلب على النحو الذي دفعته ViewController viewWillAppear أتصل مرة أخرى. (وتفريغ مثيلات خارج الشاشة استجابة ل didReceiveMemoryWarning رسائل.)

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

سيكون مرتبيا جدا لتكون قادرة على الحصول على viewWillAppear لا تعود حتى يتم تقديم UIWebView بالكامل. ولكن كيف؟

أنا أقول UIWebView ما يجب التجسيد عن طريق إرساله loadHTMLString:baseURL: رسالة. هذا غير متزامن، وبعض الوقت (قريبا) في وقت لاحق يطلق عليه مندوب الويب webViewDidFinishLoad.

جربت مع تشغيل Runloop من الداخل viewWillAppear, ، تشغيل إما NSDefaultRunLoopMode أو UITrackingRunLoopMode. وبعد هذا يعمل في محاكاة (يشكو من السجل

مزامنة catransaction] يسمى ضمن المعاملة

ولكن لا يعمل) ولكن على الجهاز الجمود، مع webViewDidFinishLoad لا تسمى أبدا.

(أيضا، يبدو وكأنه UIWebView خاصية التحميل لا يعمل. على الأقل، بعد أن أدعو loadHTMLString:baseURL: وقبل الحصول على رد الاتصال فهذا غير صحيح.)

لا يوجد حل صحيح

نصائح أخرى

الكثير من الحلول هنا أعتقد. واحد سريع هو تحميل UIWebView الخاص بك مع مجموعة الخاصية المخفية في نعم. ثم قم بتعيين UiviewController الخاص بك كمفوض UIWebViews وتنفيذ:

- (void)webViewDidFinishLoad:(UIWebView *)webView

حيث قمت بتعيين الخاصية مرة أخرى إلى لا.

شيء يجب ملاحظته هو أن WebViewDidDFinish سوف ينطلق أكثر من مرة إذا كنت قد تأطير / محتوى مضمن. لذلك عليك أن تتبع ذلك. يجب أن لا تكون حقا مشكلة إذا كنت تقوم بتحميل المحتوى المحلي.

أحب حل monowerker بشكل أفضل، لكن حل آخر سيكون التمسك ب uiwebview المجازة بالفعل في كل وقت (في كائن أكثر دامة أكثر من وحدة التحكم العرضية). سأفعل ذلك فقط إذا كانت مظهر حل Monowerker مؤخر للغاية.

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