سؤال

أنا أستخدم مشروع Three20 لتطبيق iPhone الخاص بي. لقد ضاقت مشكلتي وإنني أحاول الآن إعادة إنشاء "صور الويب في الجدول" المثال الذي يأتي مع المشروع. لقد قمت بنسخ الكود بالضبط كما هو الحال في المشروع، باستثناء أنني لا أستخدم ttnavigator (الذي يفعله المثال) ولكني أضيف My TttableViewController يدويا إلى Tabbar.

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

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

أي واحد؟ شكرا لك مقدما.

ملاحظة: إذا كنت أستخدم هذا الرمز في أي Uiview عشوائي، فإنه لا يعمل أيضا (يظهر فقط مربع أسود):

TTImageView* imageView = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)] autorelease];
imageView.autoresizesToImage = YES;
imageView.URL = @"http://webpimp.nl/logo.png";
[self.view addSubview:imageView];

إذا وضعت هذا الرمز في بلدي Appdelegate (يمينا على النافذة)، فهذا يعمل .. غريب؟

حل ممكن:على الرغم من أنني أتوقف عن استخدام TtimageView لهذا الغرض، إلا أنني أعتقد أنني اكتشفت ما كانت المشكلة؛ خيوط (وبالتالي قبول إجابة دنييز ميرت ادينك). إذا بدأت التنزيل غير المتزامن (لأنه أساسا هو كل ttimageview هو، تنزيل غير متزامن) من أي مكان ولكن الخيط الرئيسي، لن يبدأ. إذا بدأت التنزيل على الخيط الرئيسي، فستبدأ على الفور ..

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

المحلول

يبدو وكأنه مشكلة خيوط بالنسبة لي، هل تقوم بإنشاء TtimageView في Runloop الرئيسي؟

نصائح أخرى

أجد شيئا واحدا مثيرا للاهتمام. عندما استخدم تركيبة TTTableViewController، TttableViewDatasource و TtModel لدي نفس المشكلة مع تحميل TtimageView. كانت مشكلتي، أن تطبيقي لتنفيذ أساليب النماذج "و iات تحميل" لا يرجع القيم المناسبة بعد تهيئة النموذج. الذي يفرضني على استدعاء إعادة التحميل على نموذج نموذجي في طريقة "ViewDidAppear" ويسبب مشكلة تحميل الصور. لذلك أقوم بإصلاح أساليب "ISLoading" و "ISLoaded" لكل من العائد "لا" بعد الطراز الأول، وكل شيء على ما يرام.

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

لقد كتبت شيئا مشابها لهذا حيث سيتم تحميل عرض الصورة صورته الخاصة من الويب.

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

عند التمرير لعرض الجدول، يتم تعيين الخلايا على إعادة رسمها عند التعامل مع الشاشة، وهذا هو السبب في أنها تظهر عند التمرير.

عندما يتم تحميل الصورة، أخبر الخلية التي تجلس في إعادة رسمها عن طريق إرسال الرسالة SetneedsDisPlay.

بهذه الطريقة، عندما تنتهي الصورة من التنزيل، فإن الخلية الجلوس في (وفقط تلك الخلية) ستقوم بإعادة رسم نفسها لإظهار الصورة الجديدة.

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

ليس لدي إجابة لما أنت عليه تريد للقيام بذلك، لكنني سأقول أن هذا يعتبر ميزة، والسلوك المتوقع. يمكنك استخدام TtimageView في Jitalsview عندما تريد إجراء تحميل كسول من الصور. سوف يقوم TtimageView بتحميل الصور التي تعتبر إطاراتها مرئية على الشاشة. بهذه الطريقة، يستخدم الجهاز موارد الشبكة الخاصة به لتنزيل الصور التي لدى المستخدم أمامها، بدلا من مجموعة من الصور التي لا يحاول المستخدم أن ننظر إليها.

النظر في وجود قائمة طويلة قد تحتوي على مئات الصور المصغرة (مثل قائمة الأصدقاء). أعلم من التجربة أنه إذا انطلقت 100+ طلبات صورة على الأجهزة القديمة، فإن استخدام الذاكرة سوف يذهب من خلال السقف، وسوف يتعطل تطبيقك على الأرجح. TtimageView يحل هذه المشكلة.

هذه مشكلة موضوع. يمكنك تحميل الصور عن طريق تضمين السطر:

[TTURLRequestQueue mainQueue].suspended = NO;

في - (void)didLoadModel:(BOOL)firstTime.

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