App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - App-ontwikkeling - Swift en iOS: This application is modifying the auto layout engine from a background

Erwin  Op de eerste vier stappen van zijn/haar studiekaart scoort Erwin 40%. Klokje07 feb 2016, 20:15
Avatar
Avatar
Berichten:54


Hallo allemaal, 

Ik zit met een probleem dat ik niet opgelost krijg.

Ik heb een project met twee viewControllers. Op beide Vc's staat een GADBannerView met daarin een GoogleAd.

Als ik nu tussen de twee VC's schakel met een button op de eerste VC en de back-button op de tweede VC dan krijg ik na een aantal keer tussen de VC's te switchen onderstaande melding: (de ene keer na bijvoorbeeld 6 keer switchen en de andere keer bij meer of minder keer switchen)

2016-02-07 19:59:07.833 GADBannerView Test[14040:1103124] This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.  This will cause an exception in a future release.

 Stack:(

0   CoreFoundation                      0x00000001050ede65 __exceptionPreprocess + 165

1   libobjc.A.dylib                     0x0000000107153deb objc_exception_throw + 48

2   CoreFoundation                      0x00000001050edd9d +[NSException raise:format:] + 205

3   Foundation                          0x000000010574e285 _AssertAutolayoutOnMainThreadOnly + 79

4   Foundation                          0x00000001055aec1e -[NSISEngine withBehaviors:performModifications:] + 31

5   UIKit                               0x00000001064ff1ca -[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 58

6   UIKit                               0x00000001064ffd0d -[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded] + 254

7   UIKit                               0x00000001064f0313 -[UIWindow(UIConstraintBasedLayout) updateConstraintsIfNeeded] + 108

8   UIKit                               0x0000000106500a22 -[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 272

9   UIKit                               0x0000000105cd759e -[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 159

10  UIKit                               0x0000000105cb41a4 -[UIWindow layoutSubviews] + 43

11  UIKit                               0x0000000105ce74a3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703

12  QuartzCore                          0x0000000105aec59a -[CALayer layoutSublayers] + 146

13  QuartzCore                          0x0000000105ae0e70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366

14  QuartzCore                          0x0000000105ae0cee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24

15  QuartzCore                          0x0000000105ad5475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277

16  QuartzCore                          0x0000000105b02c0a _ZN2CA11Transaction6commitEv + 486

17  QuartzCore                          0x0000000105b0337c _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92

18  CoreFoundation                      0x0000000105019367 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23

19  CoreFoundation                      0x00000001050192d7 __CFRunLoopDoObservers + 391

20  CoreFoundation                      0x000000010500ef2b __CFRunLoopRun + 1147

21  CoreFoundation                      0x000000010500e828 CFRunLoopRunSpecific + 488

22  WebCore                             0x000000010c7eff65 _ZL12RunWebThreadPv + 469

23  libsystem_pthread.dylib             0x0000000108338c13 _pthread_body + 131

24  libsystem_pthread.dylib             0x0000000108338b90 _pthread_body + 0

25  libsystem_pthread.dylib             0x0000000108336375 thread_start + 13

)

Na wat speuren op internet stuitte ik op de mogelijkheid om de code voor het reclameblok in de volgende code te zetten:

        dispatch_async(dispatch_get_main_queue()) {

// hier de code

}

Dit heeft echter ook niet geholpen.

 

Heeft iemand enig idee hoe dit op te lossen?

 

Bedankt alvast voor het meedenken,

Erwin.

 

Reageer


Admin Roelf  Klokje08 feb 2016, 14:08
Avatar


Erwin,

Zonder broncode is het een beetje moeilijk raden (de thread dump helpt ook niet echt maar... je schrijft dat je "schakelt" tussen de ene viewcontroller en de andere. Gebruik je een navigation controller? Zo niet dan blijven al die viewcontrollers geladen zonder dat ze nog zichtbaar zijn - met een GADBannerView op alle nog geladen viewcontrollers is dat vragen om problemen...

Gebruik je wel een Nav controller? Dan moet het iets anders zijn en zou een stukje voorbeeldcode helpen :)

 

Reageer


Erwin  Op de eerste vier stappen van zijn/haar studiekaart scoort Erwin 40%. Klokje08 feb 2016, 16:08
Avatar
Avatar
Berichten:54


Hoi Roelf,

 

Bedankt voor je eerste reactie. Inderdaad zonder de broncode wordt het een raadplaatje.

Ik heb een klein voorbeeld gemaakt van een project waarin het fout gaat.

Het project kun je vinden op:

https://www.dropbox.com/s/yxsplpmwhshlpdj/GADBannerView%20Test.zip?dl=0

 

Alvast bedankt,

Erwin.

Reageer


Admin Roelf  Klokje10 feb 2016, 14:26
Avatar


Erwin, sorry voor de late reactie (workshops).

Ik heb zojuist geprobeerd om je project te bouwen, maar ik loop nu al tegen een ontbrekend bestand aan: GoogleMobileAds.h ontbreekt. Heb je een versie voor me met daarin dat bestand?

 

Reageer

Leuk! 2 personen vinden vinden dit leuk.

Erwin  Op de eerste vier stappen van zijn/haar studiekaart scoort Erwin 40%. Klokje10 feb 2016, 18:40
Avatar
Avatar
Berichten:54


Hoi Roelf,

Geen probleem ik ben blij met je hulp.

Ik heb het bestand opnieuw in de dropbox gezet, onder dezelfde link als hierboven.

Er stond een dubbele verwijzing in het framework search path,ik denk/hoop (meer het laatste dan het eerste :) )dat dit het probleem was.

 

Groeten,

Erwin

Reageer


Admin Roelf  Klokje12 feb 2016, 10:15
Avatar


Erwin,

Volgens mij is dit een bug in de GADBannerView-code. Ik kan probleemloos een viewcontroller met jouw banner maken, maar zodra ik die in een NavController opneem, beginnen de problemen: banners verschijnen dan weer wel en dan weer niet. In de Console zie je dat de request van Google terugkomt, maar bij het renderen ervan (het op het scherm tonen) gaat het mis - en die functies zitten in het GADBannerView-code, waar je dus niet bij kunt komen.

Ik zou dit bij Google melden, want je doet alles precies zoals het hoort!

Sorry dat ik geen beter nieuws voor je heb...

Reageer


Erwin  Op de eerste vier stappen van zijn/haar studiekaart scoort Erwin 40%. Klokje12 feb 2016, 10:33
Avatar
Avatar
Berichten:54


Roelf,

Bedankt, voor de genomen moeite.

Ik zal het inderdaad bij Google melden.

 

Erwin.

Reageer

Leuk! 1 persoon vindt vindt dit leuk.