"এই অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ড থ্রেড থেকে অটোলেআউট ইঞ্জিনটি সংশোধন করছে"?


310

আমার ওএস এক্সে সুইফ্ট ব্যবহার করে এই ত্রুটিটি অনেকটা দেখা দিয়েছে:

"এই অ্যাপ্লিকেশনটি একটি পটভূমির থ্রেড থেকে অটোলেআউট ইঞ্জিনটি সংশোধন করছে, যা ইঞ্জিন দুর্নীতি এবং অদ্ভুত ক্রাশের দিকে নিয়ে যেতে পারে This এটি ভবিষ্যতে প্রকাশে একটি ব্যতিক্রম ঘটায়।"

আমার একটি এনএস উইন্ডো রয়েছে এবং আমি contentViewউইন্ডোটির দর্শনগুলিতে অদলবদল করছি । আমি উইন্ডোটিতে চেষ্টা করার সময় বা উইন্ডোতে একটি যুক্ত করার সময় ত্রুটিটি পাই । অটোরেসাইজ স্টাফগুলি অক্ষম করার চেষ্টা করা হয়েছে এবং অটো লেআউট ব্যবহার করে আমার কাছে কিছু নেই। কোন চিন্তা?NSApp.beginSheetsubview

কখনও কখনও এটি ঠিক থাকে এবং কিছুই ঘটে না, অন্য সময় এটি আমার UIএবং কিছুই বোঝা পুরোপুরি ভেঙে দেয়


2
: কিছু কারণে একটি চমৎকার উত্তর নিচে মোছা হয়েছে জন্য github.com/nrbrook/NBUIKitMainThreadGuard
Fattie

কমপক্ষে কয়েক ঘন্টা আমাকে বাঁচিয়েছে। ধন্যবাদ @ ফ্যাটি
ওয়ালহি

ডান এটি ব্যবহারে সতর্কতা অবলম্বন করুন, আমি সত্যিই এটি উপভোগ করেছি তবে তার পরে অন্যান্য সমস্যাগুলিও ছিল - এটি একটি শক্ত ক্ষেত্র! আশা করি এটা সাহায্য করবে!
ফ্যাটি

একটি আধা সম্পর্কিত প্রশ্ন
মধু

উত্তর:


638

এটি একটি আলাদা থ্রেডের মধ্যে স্থাপন করা দরকার যা থ্রেড ফাংশন কার্যকর হওয়ার সাথে সাথে ইউআইকে আপডেট করার অনুমতি দেয়:

আধুনিক সুইফট:

DispatchQueue.main.async {
    // Update UI
}

পুরানো সংস্করণ সুইফ্ট, প্রাক সুইফট 3।

dispatch_async(dispatch_get_main_queue(){
    // code here
})

উদ্দেশ্য গ:

dispatch_async(dispatch_get_main_queue(), ^{
    // code here
});

3
উদ্দেশ্য সি তে এই কাজটি করতে, কোড ব্লকে before এর আগে ^ (অকার্যকর) এবং একটি সেমিকোলন আফটারওয়ার্ড রাখুন।
অ্যাভেন্স

4
যদিও এটি আঘাত করে না, কেবল of এর পরিবর্তে v (অকার্যকর) প্রয়োজন হয় না। উত্তরের উদ্দেশ্য-সি সংস্করণটি ঠিক আছে।
কেলার 0

2
এটা আমার জন্য ভালই কাজ করে। আমার সমস্যার জন্য হ'ল কোনও নেটওয়ার্ক অনুরোধ করুন এবং সাফল্য সম্পূর্ণ করতে ব্লককে আমি ইউআই আপডেট করার জন্য ফাংশন বলেছি। যেহেতু ইউআইকিট থ্রেড নিরাপদ নয়, তাই ইউআই আপডেট করার জন্য মূল থ্রেডে ফেরত পাঠানো দরকার।
রাহেল

1
সুইফট 3 সমাধানের জন্য @ নায়েশতার উত্তর দেখুন
নাথানিয়েল

1
সুইফট 3 এর জন্য: DispatchQueue.main.async () { কোড }, যেমন নৈশত বলেছেন
স্মুকমুকা

146

'Dispatch_async' ব্যবহার না করে প্রিন্ট স্টেটমেন্টগুলির সাথে ডিবাগ করার সময় আপনি অনুরূপ ত্রুটি বার্তা পান তাই আপনি যখন ত্রুটি বার্তাটি পান তখন এটির ব্যবহারের সময়

সুইফট 4

DispatchQueue.main.async { //code }

সুইফট 3

DispatchQueue.main.async(){ //code }

আগের সুইফ্ট সংস্করণগুলি

dispatch_async(dispatch_get_main_queue()){ //code }

5
সিনট্যাক্সটি ভুল হওয়ার কারণে, হওয়া উচিত: dispatch_async(dispatch_get_main_queue(), ^{ /* UI related code */ });সম্পাদনা: আমি তার উত্তর আপডেট করেছি, সিনট্যাক্স বিন্যাসটি সেখানে আরও ভাল কাজ করে।
জুলটান

1
বা, যখন কোনও বন্ধের অভ্যন্তরে, ব্যাকগ্রাউন্ড থ্রেড থেকে মূলথ্রমে নেমে যান: সেলফিআপনিফর্মস্লেফটারঅনমেনথ্রেড (নির্বাচক ("আপনার ফাংশন:")), অবজেক্ট সহ: 'আপনারআরয়ে / আপনারঅবজেক্ট', ওয়েটউন্টিলডোন: সত্য)
নাইশতা

1
না এটি নয়, বাক্যবিন্যাসটি একবার দেখুন
নায়্তা

82

"এই অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ড থ্রেড থেকে অটোলেআউট ইঞ্জিনটি সংশোধন করছে" ত্রুটিটি আসল সমস্যাটি আসার অনেক পরে কনসোলে লগ করা হয়েছে, সুতরাং ব্রেকপয়েন্ট ব্যবহার না করেই এটি ডিবাগ করা শক্ত হতে পারে।

আমি আমার সমস্যাটি সনাক্ত করতে @ চিহ্নউসভেসনসনের উত্তর ব্যবহার করেছি এবং এটি এই সিম্বলিক ব্রেকপয়েন্ট (ডিবাগ> ব্রেকপয়েন্টস> সিম্বলিক ব্রেকপয়েন্ট) তৈরি করে এটি পেয়েছি :

  1. প্রতীক: [UIView layoutIfNeeded]বা[UIView updateConstraintsIfNeeded]
  2. কন্ডিশন: !(BOOL)[NSThread isMainThread]

এখানে চিত্র বর্ণনা লিখুন

এমুলেটরটিতে অ্যাপ্লিকেশন তৈরি এবং চালনা করুন এবং ত্রুটি বার্তা নিক্ষেপ করার দিকে পরিচালিত পদক্ষেপগুলি অনুলিপি করুন (অ্যাপটি স্বাভাবিকের চেয়ে ধীর হবে!)। এরপরে এক্সকোড অ্যাপটি বন্ধ করে দেবে এবং একটি পটভূমির থ্রেড থেকে ইউআই অ্যাক্সেস করে এমন কোডের লাইন (যেমন একটি ফানকের কল) চিহ্নিত করবে।


3
হুম। আমি এটি উত্সাহিত করেছি, কারণ এটি বোধগম্য মনে হয়েছিল। যাইহোক, মৃত্যুদন্ড কার্যকর হয় না এবং আমি এখনও আমার লগগুলিতে ত্রুটি পেয়েছি। প্রতীকী ব্রেকপয়েন্টটি সেট করতে আমি কি অন্যান্য শর্ত ব্যবহার করতে পারি?
Sjakelien

আমার ক্ষেত্রে, এটি বিরতি দেয়। তবে স্ট্যাক ট্রেস আমাকে এমন কোনও ইঙ্গিত দেয় না যা দেখতে দায়ী। এবং দেখানো এসেম্বলারের কোডটি কীভাবে ব্যাখ্যা করতে হয় তা আমি জানি নাmovq 0x10880ba(%rip), %rsi ; "_wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:"
রেইনহার্ড মন্নার

ডিবাগ করার সময় কি এটি অ্যাপ্লিকেশনটি গুরুতরভাবে ধীরে ধীরে চালিত করার কারণ হবে না?
Itachi

@ ইটাচি হাঁ কীভাবে স্পিডআপ করবেন তা জানেন না।
k06a

2
এক্সকোড 9 দিয়ে শুরু করা এটি একটি অন্তর্নির্মিত বৈশিষ্ট্য। স্কিম সেটিংসের "ডায়াগনস্টিক্স" ট্যাবে "মেইন থ্রেড চেকার" বিকল্পটি সক্ষম হয়েছে তা নিশ্চিত করুন
অ্যান্ড্রুপো

24

আপনি যখন কোনও পাঠ্য ক্ষেত্রের মান আপডেট করতে বা কোনও পটভূমির থ্রেডের মধ্যে একটি সাবভিউ যুক্ত করার চেষ্টা করেন, আপনি এই সমস্যাটি পেতে পারেন। সেই কারণে আপনার এই ধরণের কোডটি মূল থ্রেডে রাখা উচিত।

মূল সারিটি পাওয়ার জন্য আপনাকে এমন পদ্ধতিগুলি মোড়ানো দরকার যা প্রেরণ_আশঙ্কের সাথে ইউআই আপডেটগুলি কল করে। উদাহরণ স্বরূপ:

dispatch_async(dispatch_get_main_queue(), { () -> Void in
   self.friendLabel.text = "You are following \(friendCount) accounts"
})

সম্পাদিত - সুইফট 3:

এখন, আমরা পরবর্তী কোডটি অনুসরণ করে এটি করতে পারি:

// Move to a background thread to do some long running work
DispatchQueue.global(qos: .userInitiated).async {
   // Do long running task here
   // Bounce back to the main thread to update the UI
   DispatchQueue.main.async {
      self.friendLabel.text = "You are following \(friendCount) accounts"
   }
}

23

আমার জন্য, এই ত্রুটি বার্তাটি অ্যাডমব এসডিকে থেকে প্রাপ্ত একটি ব্যানার থেকে উদ্ভূত হয়েছিল।

আমি শর্তাধীন ব্রেকপয়েন্টটি সেট করে "ওয়েবথ্রেড" -এর উত্সটি ট্র্যাক করতে সক্ষম হয়েছি।

ব্যাকগ্রাউন্ড থ্রেড থেকে কে ইউআই আপডেট করছে তা শর্তাধীন ব্রেকপয়েন্ট

তারপরে আমি ব্যানার তৈরির সাহায্যে এটি গুটিয়ে নিয়ে বিষয়টি থেকে মুক্তি পেতে সক্ষম হয়েছি:

dispatch_async(dispatch_get_main_queue(), ^{
   _bannerForTableFooter = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];
   ...
}

আমি জানি না কেন এটি কেন সাহায্য করেছিল কারণ আমি দেখতে পাচ্ছি না যে এই কোডটি কোনও মূল-মূল-থ্রেড থেকে কীভাবে ডাকা হয়েছিল।

আশা করি এটি যে কাউকে সাহায্য করতে পারে।


1
আমারও একই সমস্যা ছিল। ব্যতিক্রম কেন একটি ওয়েবথ্রডে ঘটেছিল তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছিলাম। আপনার মত আমিও একই পরিবর্তন করেছি এবং এটি এখন কাজ করে। আমি অ্যাডমব এসডিকে কিছুটা পুরানো সংস্করণ ব্যবহার করছি। আমি ভাবছি এটি সর্বশেষতম সংস্করণে সংশোধন করা হয়েছিল কিনা। এর জন্য ধন্যবাদ. আমি মনে করি না যে আমি এটি পেয়েছি।
ল্যারি


আমি এটির মতো প্রতীকী ব্রেকপয়েন্টে একটি বিরতি পেয়েছি তবে কোডটি দেখানো হয়নি। :(
ভিক্টর এঙ্গেল

20

আইওএস 9 এসডিকে আপডেট করার পরে আমার এই সমস্যাটি ছিল যখন আমি কোনও ব্লককে কল করছিলাম যা কোনও এনএসআরএল সংযোগ অ্যাসিঙ্ক অনুরোধ সমাপ্তির হ্যান্ডলারের মধ্যে ইউআই আপডেট করেছে। ডিসপ্যাচ_মাইন_উইউ ব্যবহার করে একটি ডিসপ্যাচ_্যাসিঙ্কে ব্লক কল রেখে সমস্যার সমাধান হয়েছে।

এটি আইওএস 8 এ দুর্দান্ত কাজ করেছে।


10

একই সমস্যা ছিল কারণ আমি ব্যবহার করছিলাম performSelectorInBackground


না, আমার পটভূমিতে জিনিসগুলি করা দরকার ছিল। আমি প্রেরণ_কেন্দ্র (প্রেরণ_সামগ্রী_মাইন_কুই () পদ্ধতির ভিতরে এনএসএনটিফিকেশন সেন্টার কলটি রেখেছি এবং এটি কার্যকর হয়েছে
ববি

আমি একটি ইউআরএলসেশনডেলিগেট থেকে ডেটা পাচ্ছিলাম, যা একটি এনএসনিটিফিকেশন নামে একটি ইউআইভিউউকন্ট্রোলার বিজ্ঞপ্তির প্রতিক্রিয়া জানিয়েছিল এবং সেখানে আমি ডেপ্যাচকিউ.ইমেন.সেনসিঙ্ক ব্যবহার করেছি যাতে ডেটা ভাল ছিল কি না তা ব্যবহারকারীকে দেখাতে। ভুল! - সমাধানটি নোটিফিকেশনকে মূল কাতারে রাখে। DispatchQueue.main.async {NotificationCenter.default.post (নাম: NSNotification.Name (rawValue: networkNotificationNames.products.rawValue), বস্তু: স্ব, userInfo: [networkNotificationNames.products.rawValue: productList])}
iCyberPaul

7

আপনি অবশ্যই মূল থ্রেডের বাইরে ইউআই পরিবর্তন করবেন না! ইউআইকিট থ্রেড নিরাপদ নয়, যাতে উপরের সমস্যাটি এবং আরও কিছু অদ্ভুত সমস্যা দেখা দেয় যদি আপনি এটি করেন। এমনকি অ্যাপটি ক্রাশ করতে পারে।

সুতরাং, ইউআইকিট অপারেশনগুলি করার জন্য আপনাকে ব্লকটি সংজ্ঞায়িত করতে হবে এবং এটিকে মূল কাতারে চালিত করা উচিত: যেমন,

NSOperationQueue.mainQueue().addOperationWithBlock {

}

এটি এক্সকোড 7.2 এবং আইওএস 9.2 এ উপলব্ধ নয়। অন্য কোন বিকল্প?
জয়প্রকাশ দুবে

7

স্পষ্টতই আপনি ব্যাক গ্রাউন্ড থ্রেডে কিছু ইউআই আপডেট করছেন। আপনার কোডটি না দেখে ঠিক কোথায়, ভবিষ্যদ্বাণী করতে পারবেন না।

এটি এমন কিছু পরিস্থিতি যা হতে পারে:

আপনি ব্যাকগ্রাউন্ড থ্রেডে কিছু করছেন এবং ব্যবহার করছেন না। একই ফাংশনে থাকায় এই কোডটি স্পট করা সহজ।

DispatchQueue.main.async { // do UI update here }

ব্যাকগ্রাউন্ড থ্রেডে একটি ফানককে ওয়েব রিকুয়েস্ট কল করা এবং এটির সমাপ্তি হ্যান্ডলার অন্যান্য ফানকে ইউআই আপডেট করে কল করছে। ওয়েব ট্রিক্স কলের পরে আপনি ইউআই আপডেট করেছেন যেখানে এই পরীক্ষার কোডটি সমাধান করার জন্য।

// Do something on background thread
DispatchQueue.global(qos: .userInitiated).async {
   // update UI on main thread
   DispatchQueue.main.async {
                // Updating whole table view
                self.myTableview.reloadData()
            }
}

5

"এই অ্যাপ্লিকেশনটি একটি পটভূমির থ্রেড থেকে অটোলেআউট ইঞ্জিনটি সংশোধন করছে" এর প্রধান সমস্যাটি হ'ল আসল সমস্যা দেখা দেওয়ার পরে এটি দীর্ঘ সময় লগ করা হয়েছে বলে মনে হচ্ছে, এটি সমস্যা সমাধান করা খুব কঠিন করে তুলতে পারে।

আমি তিনটি প্রতীকী ব্রেকপয়েন্ট তৈরি করে সমস্যাটি সমাধান করতে সক্ষম হয়েছি।

ডিবাগ> ব্রেকপয়েন্টস> সিম্বলিক ব্রেকপয়েন্ট তৈরি করুন ...

ব্রেকপয়েন্ট 1:

  • প্রতীক: -[UIView setNeedsLayout]

  • কন্ডিশন: !(BOOL)[NSThread isMainThread]

ব্রেকপয়েন্ট 2:

  • প্রতীক: -[UIView layoutIfNeeded]

  • কন্ডিশন: !(BOOL)[NSThread isMainThread]

ব্রেকপয়েন্ট 3:

  • প্রতীক: -[UIView updateConstraintsIfNeeded]

  • কন্ডিশন: !(BOOL)[NSThread isMainThread]

এই ব্রেকপয়েন্টগুলির সাহায্যে আপনি সহজেই আসল লাইনে ব্রেক পেতে পারেন যেখানে আপনি অ-প্রধান থ্রেডে ভুলভাবে ইউআই পদ্ধতিগুলি কল করেন।


4

ইউআইটিএবলভিউতে ডেটা পুনরায় লোড করার সময় আমার এই সমস্যাটি ছিল। কেবলমাত্র পুনরায় লোড প্রেরণ করা আমার জন্য সমস্যাটি স্থির করে।

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })

এটা আমার জন্য ছিল! আমার প্রধান কাতারে অন্য সমস্ত কিছুই ছিল তবে একটি বিপথগামী পুনরায় লোডডাটা ()!
Oprimus

3

আমারও একই সমস্যা ছিল। দেখা যাচ্ছে UIAlertsযে আমি মূল সারিটি ব্যবহার করছিলাম । তবে, তাদের অবমূল্যায়ন করা হয়েছে
যখন আমি পরিবর্তিত UIAlertsকরতে UIAlertController, আমি আর সমস্যা এবং কোন ব্যবহার করতে হবে না dispatch_asyncকোড। পাঠ - সতর্কতা মনোযোগ দিন। আপনি যখন এটি আশা করেন না তখনও তারা সহায়তা করে।


3

আপনার কাছে ইতিমধ্যে @ মার্কের সঠিক কোড উত্তর রয়েছে তবে, কেবল আমার অনুসন্ধানগুলি ভাগ করে নেওয়ার জন্য: সমস্যাটি হ'ল আপনি এই দৃশ্যে পরিবর্তনের জন্য অনুরোধ করছেন এবং ধরে নিচ্ছেন যে এটি তাত্ক্ষণিকভাবে ঘটবে। বাস্তবে, ভিউ লোড করা উপলব্ধ সংস্থানগুলির উপর নির্ভর করে। যদি সবকিছু দ্রুত পর্যাপ্তভাবে লোড হয় এবং কোনও বিলম্ব না হয় তবে আপনি কিছুই লক্ষ্য করবেন না। প্রেক্ষাপটে, যেখানে প্রক্রিয়া থ্রেডে ব্যস্ত থাকা ইত্যাদির কারণে কোনও বিলম্ব হয়, অ্যাপ্লিকেশনটি এমন পরিস্থিতিতে চলে যায় যেখানে এটি এখনও প্রস্তুত না হওয়া সত্ত্বেও কিছু প্রদর্শন করার কথা রয়েছে। অতএব, এই অনুরোধগুলিকে একটি অ্যাসিনক্রোনাস কাতারে প্রেরণ করার পরামর্শ দেওয়া হয় যাতে তারা বোঝার উপর ভিত্তি করে মৃত্যুদন্ড কার্যকর করে।


2

আমার এই সমস্যাটি ছিল যখন আমি টাচআইডি ব্যবহার করছিলাম যদি সে অন্য কারওকে সহায়তা করে, আপনার সাফল্যের যুক্তিটি মুড়ে ফেলুন যা সম্ভবত ইউআই এর সাথে মূল কাতারে কিছু করে।


2

এটি কোনও পাঠ্য ক্ষেত্র / লেবেল মান সেট করা বা পটভূমির থ্রেডের মধ্যে একটি সংক্ষিপ্তসার যুক্ত করার মতো সহজ কিছু হতে পারে, যা কোনও ক্ষেত্রের বিন্যাস পরিবর্তনের কারণ হতে পারে। ইন্টারফেসের সাথে আপনি যে কিছু করেন তা কেবলমাত্র মূল থ্রেডে ঘটে তা নিশ্চিত করুন।

এই লিঙ্কটি দেখুন: https://forums.developer.apple.com/thread/7399


2

একই ভিউকন্ট্রোলারে ইউআইএলবেলে ত্রুটি বার্তাটি আপডেট করার চেষ্টা করার সময় আমার একই সমস্যা ছিল (সাধারণ কোডিংয়ের মাধ্যমে এটি করার চেষ্টা করার সময় ডেটা আপডেট করতে কিছুটা সময় লাগে)। আমি DispatchQueueসুইফ্ট 3 এক্সকোড 8 এ ব্যবহার করেছি এবং এটি কার্যকর হয়।


2

আপনি যদি এই ত্রুটিটি শিকার করতে চান তবে ইস্যুগুলির চেকবক্সে প্রধান থ্রেড চেকার বিরতি দিন। মূল কাতারে সমস্যাযুক্ত লাইনটি প্রেরণ করে, এটি স্থির করা বেশিরভাগ সময় সহজ।

এখানে চিত্র বর্ণনা লিখুন


1
এটি ঠিক কী করে? "মেইন থ্রেড চেকার" ডিফল্টরূপে সক্ষম হয়েছিল এবং আমি অতিরিক্তভাবে "থ্রেড স্যানিটাইজার" এবং "ইস্যুতে বিরাম দিন" উভয়ের জন্য চেক করেছিলাম তবে এটি কেবল কোনও "পটভূমির থ্রেড থেকে পরিবর্তনকারী" বার্তাটিতে আরও কোনও তথ্য যোগ না করেই ছুড়ে ফেলে।
নেফ

এটি অ্যাপের কার্য সম্পাদনকে এমন বিন্দুতে থামায় যেখানে ইউআইটি কোনও পটভূমির থ্রেডে পরিবর্তন করা হচ্ছে।
রকদাসউইফ্ট

অদ্ভুত, এটি আমার অ্যাপ্লিকেশনটিতে এটি করেনি (এক্সকোড 10.2.1)। বিরতি দেওয়ার জন্য এবং কোডের লাইনে আমাকে নির্দেশ করার জন্য আমাকে নিজেই ব্রেকপয়েন্টগুলি যুক্ত করতে হয়েছিল ( এখানে বর্ণিত হিসাবে )।
নেফ

এবং বিকল্পগুলির এই সেটটি দেখতে আমি কী করব?
ডেভিড রেক্টর

আপনার টার্গেটের স্কিমটি সম্পাদনা করুন
রকডাসউইফট

1

আমার জন্য বিষয়টি নিম্নলিখিত ছিল। নিশ্চিত করুন যে performSegueWithIdentifier:মূল থ্রেডে সঞ্চালিত হয়েছে:

dispatch_async (dispatch_get_main_queue(), ^{
  [self performSegueWithIdentifier:@"ViewController" sender:nil];
});

1

সুইফট 4,

মনে করুন, আপনি যদি অপারেশন সারি ব্যবহার করে কোনও পদ্ধতি কল করছেন

operationQueue.addOperation({
            self.searchFavourites()
        })

এবং ধরুন ফাংশন অনুসন্ধানের ফ্যাভারিটগুলি এর মতো,

func searchFavourites() {
     DispatchQueue.main.async {
                    //Your code
                }
}

যদি আপনি কল করেন, মূল থ্রেডের "অনুসন্ধান ফ্যাভোরিটিস" পদ্ধতির অভ্যন্তরে সমস্ত কোড, আপনি যদি এতে কিছু ইউআই আপডেট করে থাকেন তবে এটি ত্রুটি ঘটবে।

এই অ্যাপ্লিকেশনটি মূল থ্রেড থেকে ইঞ্জিনটি অ্যাক্সেস করার পরে পটভূমি থ্রেড থেকে অটোলেআউট ইঞ্জিনটি সংশোধন করছে।

সুতরাং সমাধান ব্যবহার করুন,

operationQueue.addOperation({
            DispatchQueue.main.async {
                self.searchFavourites()
            }
        })

এ জাতীয় দৃশ্যের জন্য।


1

লগগুলি থেকে এই লাইনটি পরীক্ষা করে দেখুন

$S12AppName18ViewControllerC11Func()ySS_S2StF + 4420

আপনি যে কোনও ফাংশনটি ব্যাকগ্রাউন্ড থ্রেড থেকে কল করছেন বা যেখানে আপনি এপিআই পদ্ধতিতে কল করছেন তার মূল থ্রেড থেকে আপনার ফাংশনটি কল করতে হবে তা যাচাই করতে পারেন।

DispatchQueue.main.async { func()}

ফানক () হ'ল সেই ফাংশনটি যা আপনি এপিআই কল সাফল্যের ফলস্বরূপ কল করতে চান অন্যথায়।

এখানে লগ

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
 Stack:(
    0   Foundation                          0x00000001c570ce50 <redacted> + 96
    1   Foundation                          0x00000001c5501868 <redacted> + 32
    2   Foundation                          0x00000001c5544370 <redacted> + 540
    3   Foundation                          0x00000001c5543840 <redacted> + 396
    4   Foundation                          0x00000001c554358c <redacted> + 272
    5   Foundation                          0x00000001c5542e10 <redacted> + 264
    6   UIKitCore                           0x00000001f20d62e4 <redacted> + 488
    7   UIKitCore                           0x00000001f20d67b0 <redacted> + 36
    8   UIKitCore                           0x00000001f20d6eb0 <redacted> + 84
    9   Foundation                          0x00000001c571d124 <redacted> + 76
    10  Foundation                          0x00000001c54ff30c <redacted> + 108
    11  Foundation                          0x00000001c54fe304 <redacted> + 328
    12  UIKitCore                           0x00000001f151dc0c <redacted> + 156
    13  UIKitCore                           0x00000001f151e0c0 <redacted> + 152
    14  UIKitCore                           0x00000001f1514834 <redacted> + 868
    15  UIKitCore                           0x00000001f1518760 <redacted> + 104
    16  UIKitCore                           0x00000001f1543370 <redacted> + 1772
    17  UIKitCore                           0x00000001f1546598 <redacted> + 120
    18  UIKitCore                           0x00000001f14fc850 <redacted> + 1452
    19  UIKitCore                           0x00000001f168f318 <redacted> + 196
    20  UIKitCore                           0x00000001f168d330 <redacted> + 144
    21  AppName                        0x0000000100b8ed00 $S12AppName18ViewControllerC11Func()ySS_S2StF + 4420
    22  AppName                        0x0000000100b8d9f4 $S12CcfU0_y10Foundation4DataVSg_So13NSURLResponseCSgs5Error_pSgtcfU_ + 2384
    23  App NAme                        0x0000000100a98f3c $S10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgIegggg_So6NSDataCSgAGSo7NSErrorCSgIeyByyy_TR + 316
    24  CFNetwork                           0x00000001c513aa00 <redacted> + 32
    25  CFNetwork                           0x00000001c514f1a0 <redacted> + 176
    26  Foundation                          0x00000001c55ed8bc <redacted> + 16
    27  Foundation                          0x00000001c54f5ab8 <redacted> + 72
    28  Foundation                          0x00000001c54f4f8c <redacted> + 740
    29  Foundation                          0x00000001c55ef790 <redacted> + 272
    30  libdispatch.dylib                   0x000000010286f824 _dispatch_call_block_and_release + 24
    31  libdispatch.dylib                   0x0000000102870dc8 _dispatch_client_callout + 16
    32  libdispatch.dylib                   0x00000001028741c4 _dispatch_continuation_pop + 528
    33  libdispatch.dylib                   0x0000000102873604 _dispatch_async_redirect_invoke + 632
    34  libdispatch.dylib                   0x00000001028821dc _dispatch_root_queue_drain + 376
    35  libdispatch.dylib                   0x0000000102882bc8 _dispatch_worker_thread2 + 156
    36  libsystem_pthread.dylib             0x00000001c477917c _pthread_wqthread + 472
    37  libsystem_pthread.dylib             0x00000001c477bcec start_wqthread + 4
)

0

আমি এই সমস্যার মুখোমুখি হয়েছি এবং আউটপুটে মুদ্রিত হওয়া এই বার্তাগুলির একটি স্টোন এবং সন্ধানের চিহ্নগুলি দেখেছি, যখন আমি উইন্ডোটির প্রাথমিক মানের চেয়ে ছোট আকারে পুনরায় আকার দিয়েছিলাম। সমস্যাটি খুঁজে বের করার জন্য দীর্ঘ সময় ব্যয় করে আমি ভেবেছিলাম বরং সহজ সমাধানটি ভাগ করব share আমি একবার সক্রিয় ছিল Can Draw Concurrentlyএকটি অন NSTextViewআইবি মাধ্যমে। এটি অ্যাপকিটকে বলে যে এটি draw(_:)অন্য থ্রেড থেকে দর্শনটির পদ্ধতিটি কল করতে পারে । এটি নিষ্ক্রিয় করার পরে, আমি আর কোনও ত্রুটি বার্তা পেলাম না। ম্যাকোস 10.14 বিটাতে আপডেট করার আগে আমি কোনও সমস্যা অনুভব করিনি, তবে একই সময়ে, আমি পাঠ্য দর্শন দিয়ে কাজ সম্পাদন করার জন্য কোডটিও পরিবর্তন করতে শুরু করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.