سؤال

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

وأي أفكار عن كيف يمكن تحديث بشكل فعال بلدي tableview / الخليوي؟

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

المحلول

هل حاولت استدعاء [cell setNeedsDisplay] لكن على الترابط الرئيسي؟

وsetNeedsDisplay عندما دعا مؤشر ترابط خلفية لا حد كبير أي شيء،

وحاول هذا:

[cell performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];

نصائح أخرى

هل تستخدم رد على إخطار وحدة تحكم من tableview الخاصة بك التي تم تحميلها على الصور؟ إذا لم يكن كذلك، من شأنه أن يكون وسيلة مثالية.

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

ولست متأكدا بالضبط ما تحاول تحقيق مع الصور - ولكن يمكن أن أعتقد انهم قادمون من ملقم وهذا هو السبب في أنك تريد تحميلها في موضوع آخر

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

.

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

وواكتمال كل عملية يمكنك إجراء مكالمة إلى الخلية أو tableViewController (ربما إنشاء بروتوكول مندوب لجعل هذا من السهل حقا).

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

وإذا كان NSOperations يبدو معقدة أو كنت تأجيل هذا - من فضلك حاول ذلك - هو أبسط كثيرا مما كنت قد جعلت الأمر يبدو

هل حاولت استدعاء [cell setNeedsDisplay]؟

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