web-dev-qa-db-fra.com

Les modifications apportées au moteur de mise en page ne doivent pas être effectuées à partir d'un thread d'arrière-plan après avoir été accédées à partir du thread principal.

Je viens de télécharger iOS 13 pour mon iPhone et le nouveau Xcode. Je voulais tester mon application pour iOS 13, mais lorsque j'essaierai d'exécuter mon application, cela me donnera une erreur après quelques secondes. Erreur:

Arrêt de l'application en raison d'une exception non interceptée "NSInternalInconsistencyException", raison: "Les modifications du moteur de présentation ne doivent pas être effectuées à partir d'un thread d'arrière-plan après avoir été accédées à partir du thread principal." *** Premier pile d'appel de touche: (0x191ea9c30 0x191bc40c8 0x192395434 0x19218eb94 0x19218eaa8 0x19218e718 0x1963e6ea8 0x191bbfaf0 0x198984384 0x19634fe54 0x19898468c 0x198997bf4 0x1988dd3e4 0x1989083a0 0x198909388 0x191bbc3c0 0x191bb4dbc 0x191bb6de8 0x191bb6b30 0x191bbcc78) libc ++ abi.dylib: mettre fin à l'exception non interceptée du genre NSException

Dans iOS 12 et inférieur, tout semble fonctionner et je n'obtiendrai pas cette erreur. Quelqu'un sait-il comment corriger cette erreur et ce que signifie cette erreur?

ID de téléchargement:

func Download_ID() {
    let urlString = "https://www.instagram.com/\(self.username_String)/?__a=1"
    guard let url = URL(string: urlString) else { return }
    URLSession.shared.dataTask(with: url) { data, urlResponse, error in
        guard let data = data, error == nil, urlResponse != nil else {
            print(error)
            return
        }
        do
        {
            let decoder = JSONDecoder()
            let downloadedData_user = try decoder.decode(Website.self, from: data)
            DispatchQueue.main.async {
                self.profile_img_String = downloadedData_user.graphql.user.profile_pic_url
                let Veri = downloadedData_user.graphql.user.is_verified
                if Veri == true {
                    self.Verified!.isHidden = false
                }else{
                    self.Verified!.isHidden = true

                }
                self.Name!.text = downloadedData_user.graphql.user.full_name
                self.username!.text = self.username_String
                let url = URL(string: "\(self.profile_img_String)")
                self.profileImage!.kf.indicatorType = .activity
                self.profileImage!.kf.setImage(
                    with: url,
                    placeholder: UIImage(named: "image-placeholder.png"),
                    options: [
                        .scaleFactor(UIScreen.main.scale),
                        .transition(.fade(0.4)),
                        .cacheOriginalImage
                ])
            }
        } catch {
            print(error)
        }
    }.resume()
}

Empiler:

Main Thread Checker: UI API called on a background thread: -[UIView setHidden:]
PID: 4437, TID: 1560742, Thread name: (none), Queue name: NSOperationQueue 0x10440d330 (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4   Instagram Profile                   0x00000001029c09bc $s17Instagram_Profile21History_TableViewCellC11Download_IDyyFyycfU_y10Foundation4DataVSg_So13NSURLResponseCSgs5Error_pSgtcfU_ + 1612
5   Instagram Profile                   0x00000001029c10d4 $s10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgIegggg_So6NSDataCSgAGSo7NSErrorCSgIeyByyy_TR + 284
6   CFNetwork                           0x0000000195105ffc CFNetServiceBrowserSearchForServices + 95540
7   CFNetwork                           0x00000001951168dc _CFHTTPMessageSetResponseProxyURL + 7680
8   Foundation                          0x0000000192279c60 A99BF5C7-12EA-3700-8798-6522387A8A89 + 1170528
9   Foundation                          0x000000019217b7e8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 129000
10  Foundation                          0x000000019227bfbc A99BF5C7-12EA-3700-8798-6522387A8A89 + 1179580
11  Foundation                          0x000000019217b464 A99BF5C7-12EA-3700-8798-6522387A8A89 + 128100
12  Foundation                          0x000000019227c9e8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 1182184
13  Foundation                          0x000000019227c4a8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 1180840
14  libdispatch.dylib                   0x00000001042bda48 _dispatch_block_async_invoke2 + 144
15  libdispatch.dylib                   0x00000001042af2a8 _dispatch_client_callout + 20
16  libdispatch.dylib                   0x00000001042b2084 _dispatch_continuation_pop + 572
17  libdispatch.dylib                   0x00000001042b1468 _dispatch_async_redirect_invoke + 628
18  libdispatch.dylib                   0x00000001042c0aac _dispatch_root_queue_drain + 356
19  libdispatch.dylib                   0x00000001042c1418 _dispatch_worker_thread2 + 144
20  libsystem_pthread.dylib             0x0000000191bb6a60 _pthread_wqthread + 216
21  libsystem_pthread.dylib             0x0000000191bbcc78 start_wqthread + 8
2019-09-24 23:21:24.917645+0200 Instagram Profile[4437:1560742] [reports] Main Thread Checker: UI API called on a background thread: -[UIView setHidden:]
PID: 4437, TID: 1560742, Thread name: (none), Queue name: NSOperationQueue 0x10440d330 (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4   Instagram Profile                   0x00000001029c09bc $s17Instagram_Profile21History_TableViewCellC11Download_IDyyFyycfU_y10Foundation4DataVSg_So13NSURLResponseCSgs5Error_pSgtcfU_ + 1612
5   Instagram Profile                   0x00000001029c10d4 $s10Foundation4DataVSgSo13NSURLResponseCSgs5Error_pSgIegggg_So6NSDataCSgAGSo7NSErrorCSgIeyByyy_TR + 284
6   CFNetwork                           0x0000000195105ffc CFNetServiceBrowserSearchForServices + 95540
7   CFNetwork                           0x00000001951168dc _CFHTTPMessageSetResponseProxyURL + 7680
8   Foundation                          0x0000000192279c60 A99BF5C7-12EA-3700-8798-6522387A8A89 + 1170528
9   Foundation                          0x000000019217b7e8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 129000
10  Foundation                          0x000000019227bfbc A99BF5C7-12EA-3700-8798-6522387A8A89 + 1179580
11  Foundation                          0x000000019217b464 A99BF5C7-12EA-3700-8798-6522387A8A89 + 128100
12  Foundation                          0x000000019227c9e8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 1182184
13  Foundation                          0x000000019227c4a8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 1180840
14  libdispatch.dylib                   0x00000001042bda48 _dispatch_block_async_invoke2 + 144
15  libdispatch.dylib                   0x00000001042af2a8 _dispatch_client_callout + 20
16  libdispatch.dylib                   0x00000001042b2084 _dispatch_continuation_pop + 572
17  libdispatch.dylib                   0x00000001042b1468 _dispatch_async_redirect_invoke + 628
18  libdispatch.dylib                   0x00000001042c0aac _dispatch_root_queue_drain + 356
19  libdispatch.dylib                   0x00000001042c1418 _dispatch_worker_thread2 + 144
20  libsystem_pthread.dylib             0x0000000191bb6a60 _pthread_wqthread + 216
21  libsystem_pthread.dylib             0x0000000191bbcc78 start_wqthread + 8
2019-09-24 23:21:25.431565+0200 Instagram Profile[4437:1560883] WF: _userSettingsForUser mobile: {
    filterBlacklist =     (
    );
    filterWhitelist =     (
    );
    restrictWeb = 1;
    useContentFilter = 0;
    useContentFilterOverrides = 0;
    whitelistEnabled = 0;
}
2019-09-24 23:21:25.431612+0200 Instagram Profile[4437:1560883] WF: _WebFilterIsActive returning: NO
2019-09-24 23:21:26.084697+0200 Instagram Profile[4437:1560883] WF: _userSettingsForUser mobile: {
    filterBlacklist =     (
    );
    filterWhitelist =     (
    );
    restrictWeb = 1;
    useContentFilter = 0;
    useContentFilterOverrides = 0;
    whitelistEnabled = 0;
}
2019-09-24 23:21:26.084745+0200 Instagram Profile[4437:1560883] WF: _WebFilterIsActive returning: NO
2019-09-24 23:21:26.150637+0200 Instagram Profile[4437:1560979] NSURLConnection ordering violation: didFinishLoading to be scheduled before didReceiveResponse
2019-09-24 23:21:30.905067+0200 Instagram Profile[4437:1560742] 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                          0x00000001923953a4 A99BF5C7-12EA-3700-8798-6522387A8A89 + 2331556
    1   Foundation                          0x000000019218eb94 A99BF5C7-12EA-3700-8798-6522387A8A89 + 207764
    2   Foundation                          0x000000019218eaa8 A99BF5C7-12EA-3700-8798-6522387A8A89 + 207528
    3   Foundation                          0x000000019218e718 A99BF5C7-12EA-3700-8798-6522387A8A89 + 206616
    4   UIKitCore                           0x00000001963e6ea8 EBED47E6-6BB2-3119-82CE-CC13EDCA02D6 + 15568552
    5   libobjc.A.dylib                     0x0000000191bbfaf0 10328337-A06E-370F-8958-6EDDA1F434DC + 6896
    6   QuartzCore                          0x0000000198984384 18D85F6F-635D-3A6F-BF7D-898A644FDCF5 + 1393540
    7   UIKitCore                           0x000000019634fe54 EBED47E6-6BB2-3119-82CE-CC13EDCA02D6 + 14949972
    8   QuartzCore                          0x000000019898468c 18D85F6F-635D-3A6F-BF7D-898A644FDCF5 + 1394316
    9   QuartzCore                          0x0000000198997bf4 18D85F6F-635D-3A6F-BF7D-898A644FDCF5 + 1473524
    10  QuartzCore                          0x00000001988dd3e4 18D85F6F-635D-3A6F-BF7D-898A644FDCF5 + 709604
    11  QuartzCore                          0x00000001989083a0 18D85F6F-635D-3A6F-BF7D-898A644FDCF5 + 885664
    12  QuartzCore                          0x0000000198909388 18D85F6F-635D-3A6F-BF7D-898A644FDCF5 + 889736
    13  libsystem_pthread.dylib             0x0000000191bbc3c0 FEB52688-4D65-3D38-AD50-01B128A74208 + 37824
    14  libsystem_pthread.dylib             0x0000000191bb4dbc FEB52688-4D65-3D38-AD50-01B128A74208 + 7612
    15  libsystem_pthread.dylib             0x0000000191bb6de8 FEB52688-4D65-3D38-AD50-01B128A74208 + 15848
    16  libsystem_pthread.dylib             0x0000000191bb6b30 _pthread_wqthread + 424
    17  libsystem_pthread.dylib             0x0000000191bbcc78 start_wqthread + 8
)
2019-09-24 23:21:30.927369+0200 Instagram Profile[4437:1560742] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.'
*** First throw call stack:
(0x191ea9c30 0x191bc40c8 0x192395434 0x19218eb94 0x19218eaa8 0x19218e718 0x1963e6ea8 0x191bbfaf0 0x198984384 0x19634fe54 0x19898468c 0x198997bf4 0x1988dd3e4 0x1989083a0 0x198909388 0x191bbc3c0 0x191bb4dbc 0x191bb6de8 0x191bb6b30 0x191bbcc78)
libc++abi.dylib: terminating with uncaught exception of type NSException
20
Dani010

Le code d'extraction de votre réseau est presque correct - vous rechargez la table dans la file d'attente principale sans arrêter l'indicateur d'activité.

Il vous suffit de déplacer cette ligne à l'intérieur de la fermeture:

let downloadedData_user = try decoder.decode(Top_us.self, from: data)
    self.Top_Search = downloadedData_user.users
    DispatchQueue.main.async {
        self.tableView.reloadData()
        self.Indicator.stopAnimating()
    }

Notez que par convention, les propriétés doivent commencer par une lettre minuscule tandis que les classes doivent commencer par une lettre majuscule. Les deux doivent utiliser camelCase, donc Top_Search doit être topSearch, Top_us doit être TopUsers et Indicator doit être indicator.

13
Paulw11

Si vous rencontrez des problèmes pour identifier la cause, essayez ce qui suit.

Cliquez sur votre schéma (à côté du bouton d'arrêt), puis Modifier le schéma .

Sous Exécuter -> Diagnostics vous devez activer Vérificateur de fil principal .

enter image description here

Comme indiqué par le point d'arrêt qui a été ajouté, votre exécution s'arrête maintenant lorsque vous essayez de modifier l'interface utilisateur sur un thread non principal.

enter image description here

7
Ginger Apps

Vous devez envelopper l'erreur de gestion par DispatchQueue.main.async{}

func Download_ID() {
    let urlString = "https://www.instagram.com/\(self.username_String)/?__a=1"
    guard let url = URL(string: urlString) else { return }
    URLSession.shared.dataTask(with: url) { data, urlResponse, error in
        guard let data = data, error == nil, urlResponse != nil else {
            // Add DispatchQueue
            DispatchQueue.main.async {
              print(error)
            }
            return
        }
        do
        {
            let decoder = JSONDecoder()
            let downloadedData_user = try decoder.decode(Website.self, from: data)
            // your logic
            DispatchQueue.main.async {
               // update or reload table in here
            }
        } catch {
            // Add dispach_queue
            DispatchQueue.main.async {
              print(error)
            }
        }
    }.resume()
}
3
Giang