performSelectorOnMainThread bajarilmaydi

Sochimni buzib, biron bir fikr yoki taklifni juda qadrlayman.

performanceSelectorOnMainThread: withObject: waitUntilDone: deb chaqiradigan ob'ektga ega bolimda ish zarrachasidan. Bu 95% yaxshi ishlaydi. iOS beta-versiyasidan boshlab va hozir chiqarilganidan keyin har bir marta, bir qurilma performSelectorOnMainThread: withObject: waitUntilDone: qo'ng'iroqlarini amalga oshirishni rad etadi ... Hech qanday xato xabari yo'qolmaydi, Agar qurilma "muvaffaqiyatsiz" bo'lgan holatda o'tsa, lekin u erda bo'lsa, u ilovani o'chirib tashlab yoki qayta o'rnatmaguncha yoki uni o'chirishga majbur qilmaguncha, u joyni o'zgartiradi, keyin uni joylashuvni qayta tiklash xizmatlarini normal holatga qaytaring ... qurilmani qayta boshlash uni tuzatmaydi. Avval o'chirib tashlamasdan qayta tiklash uni tuzatmaydi. Juda g'alati. Bilaman, bu ko'pincha ishlaydi, chunki aksariyat qurilmalarda hech qanday muammo yo'q, biroq ba'zi qurilmalar muntazam ravishda muvaffaqiyatsiz ishlamoqda (har 3-4 kunda). Men buni bilaman, bu performanceSelectorOnMainThread: withObject: waitUntilDone: hozirda noto'g'ri qurilma borligi sababli uni chaqirmaydi va men NSLogni chaqirish kerak bo'lgan usulga qo'ydim. Bu juda yaxshi ishlaydi, ammo muvaffaqiyatsiz qurilmada, performSelectorOnMainThread: withObject: waitUntilDone: bu usulni chaqirish uchun ishlatiladi, NSLog bu ishlamayapti ...

Bu iOS 5 betas bilan boshlangan va yana, ozodlikka chiqadi. Bu mening qurilmamning 2 qismida tez-tez sodir bo'ladi, lekin men o'zimning sinovdan o'tgan boshqa 10 qurilmadan birontasida yo'q. Men faqat beta-versiyada ba'zi hijob bilan ishlaydigan qurilmam ekanligimni taxmin qildim, lekin beta-versiyaga hech qachon ta'sir qilmagan yangi 4S-da, shuningdek, bir foydalanuvchining iPad 2-da (mening iPad 2-da emas) sodir bo'ladi.

Men qaerga qarashni bilmayman. Men buni amalga oshirishni aytaman va u odatda deyarli har bir qurilmada ishlaydi, lekin bir xil satrda hech qanday javob, xatoliklar va boshqalar yo'q.

5
@picciano, bu haqda qanday qilib oldingiz? Men bir xil muammolarni boshdan kechiryapman va bu qulfni tuzatish uchun nima qilishim kerakligini tushunolmayman.
qo'shib qo'ydi muallif Duncan Groenewald, manba
Siz CoreData-ni har qanday imkoniyatdan foydalanib olasizmi? Menda shunga o'xshash muammo bor edi. Haqiqatan ham, boshqa bir mavzu yozishga urinayotganda, CoreData yordamida o'qish jarayonini bajarish uchun kutib turgan ish zarrachalari bo'ldi.
qo'shib qo'ydi muallif picciano, manba

2 javoblar

performSelectorOnMainThread: withObject: waitUntilDone ba'zan qobiliyatsiz bo'lishi mumkin. Lotni yuborishdan foydalanishni o'ylab ko'rdingizmi?

Siz blokni yaratishingiz va quyidagi kabi asosiy mavzuga yuborishingiz mumkin:

dispatch_async(dispatch_get_main_queue(), ^{
    
});

This would have the same save affect as using performSelectorOnMainThread:withObject:waitUntilDone http://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1

3
qo'shib qo'ydi

Bir mavzuning RunLoop bir necha xil rejimga ega. Ehtimol, siz qo'ng'iroqni amalga oshiradigan vaqt ichida asosiy thread boshqa bir xil rejimda ishlaydi (ya'ni performSelectorOnMainThread: withObject: WaitUntilDone: ).

performanceSelectorOnMainThread: withObject: waitUntilDone: usullari dan foydalaning. Qarang: Apple hujjatlari .

Bundan tashqari, GCD (libdispatch) ajoyibdir, lekin sizni o'zingizning qulflashga tayyor turishingizni himoya qilmaydi: Sizning usulingiz asosiy ish zarrachasida ishlayotgan va siz qidirayotgan vaziyatni ko'rib chiqing:

dispatch_sync(dispatch_get_main_queue(), ^{
    
});
0
qo'shib qo'ydi