2015-10-26 24 views
8

Update 29. Oktober 2015: Möglicherweise haben die Ursache dafür gefunden. Ich erstelle eine Gradient-Ebene nach this StackOverflow post - es funktioniert perfekt für mich und alle anderen, mit denen ich getestet habe, aber könnten andere Leute Probleme damit haben?iPhone App Absturz: UIKit

CAGradientLayer * g = [CAGradientLayer layer]; 
UIColor * colourFrom = [UIColor colorWithRed:0.1 green:0.7 blue:0.3 alpha:1.0]; 
UIColor * colourTo = [UIColor colorWithRed:0.1 green:0.8 blue:0.4 alpha:1.0]; 

g.frame  = self.view.bounds; 
g.cornerRadius = 10; 
g.startPoint = CGPointMake(0.0, 0.5); 
g.endPoint  = CGPointMake(1.0, 0.5); 
g.colors  = [NSArray arrayWithObjects:(id)[colourFrom CGColor], 
              (id)[colourTo CGColor], 
              nil]; 

-Update 27. Oktober 2015: Noch diese Abstürze zu sehen, in von Crashlytics kommen.


-Update 26. Oktober 2015: Ich fand this thread on StackOverflow, die genau das gleiche Problem scheint zu sein, wie ich bin mit (aber ohne Antworten ..), aber sie sind Facebook/Twitter-Aktion Blätter verwendet, die ich bin nicht. Nur etwas, um das Problem zu diagnostizieren.


freigegeben nur eine App in den App Store, und wir sind ein kleiner Prozentsatz der Nutzer (~ 2%) mit diesem Absturz in Crashlytics sehen:

Es scheint, dass es nur mit erscheinende iOS 9, aber es passiert über alle Geräte.

Schwerwiegende Ausnahme: NSInternalInconsistencyException In dieser Situation werden nur RGBA- oder weiße Farbräume unterstützt.

Persönlich ich laufen ein iPhone 6 mit 9.1 und bin nicht das Problem. Ich habe auch in Simulatoren versucht und wieder keine Probleme, daher bin ich mir nicht sicher wie dieser Bug tatsächlich auftaucht. Der Stack-Trace von Crashlytics befindet sich darunter.

Es scheint, als ob ein UIColor zu einem NSDictionary hinzugefügt wird, ohne verschlüsselt zu werden, aber das mache ich nirgendwo in der App. Es scheint auch, als ob es etwas mit UIRemoteViewController zu tun haben könnte, aber ich benutze das nicht in der App (es sei denn, die Anmeldung bei Facebook verursacht das - ich habe versucht, mit Facebook auf dem Telefon und Simulatoren einloggen, aber wieder kann ich nicht Lassen Sie diesen Fehler erscheinen).

Hat jemand eine Idee von was könnte dies verursachen?


Thread : Fatal Exception: NSInternalInconsistencyException 
0 CoreFoundation     6512725832 __exceptionPreprocess 
1 libobjc.A.dylib    6869942144 objc_exception_throw 
2 CoreFoundation     6512725528 +[NSException raise:format:] 
3 Foundation      6528403996 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] 
4 UIKit       6606881444 -[UIColor encodeWithCoder:] 
5 Foundation      6528169072 _encodeObject 
6 Foundation      6528197336 +[NSKeyedArchiver archivedDataWithRootObject:] 
7 UIKit       6609904352 -[_UIAppearanceRecorder _recordInvocation:withClassName:containerClassNames:traitCollection:selectorString:forRemoteProcess:] 
8 UIKit       6609884356 __54+[_UIAppearance _recordersExcludingSource:withWindow:]_block_invoke 
9 CoreFoundation     6511594744 __65-[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:]_block_invoke 
10 CoreFoundation     6511594448 -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] 
11 UIKit       6609883592 +[_UIAppearance _recordersExcludingSource:withWindow:] 
12 UIKit       6611900724 UIViewServiceCurrentAppearanceSerializedRepresentations 
13 UIKit       6610654700 +[_UIRemoteViewController _requestViewController:traitCollection:fromServiceWithBundleIdentifier:service:connectionHandler:] 
14 UIKit       6610654160 +[_UIRemoteViewController requestViewControllerWithService:connectionHandler:] 
15 UIKit       6609355772 __117-[NSExtension(UIViewControllerAdditions) instantiateViewControllerWithInputItems:listenerEndpoint:connectionHandler:]_block_invoke_2 
16 libdispatch.dylib    6878402280 _dispatch_call_block_and_release 
17 libdispatch.dylib    6878402216 _dispatch_client_callout 
18 libdispatch.dylib    6878424496 _dispatch_main_queue_callback_4CF 
19 CoreFoundation     6512427512 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ 
20 CoreFoundation     6512418912 __CFRunLoopRun 
21 CoreFoundation     6511561888 CFRunLoopRunSpecific 
22 GraphicsServices    6701891720 GSEventRunModal 
23 UIKit       6602887164 UIApplicationMain 
24 MyApp       4296179280 main (main.m:16) 
25 libdyld.dylib     6878603448 start 

-Update mit Codebeispielen

Diese im application:didFinishLaunchingWithOptions genannt wird:

// Make the app look pretty 
// Turn the status bar color white 
[[UIApplication sharedApplication] setStatusBarHidden:NO]; 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 
// Nav bar: Background colour 
[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0]]; 
// Nav bar: White text 
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1.0], NSForegroundColorAttributeName, nil]]; 
// Nav bar: Tint colour 
[UINavigationBar appearance].tintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"TintNavBar"]]; 
// Tab Bar: Background color 
[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0]]; 
// Tab bar: Tint colour 
[UITabBar appearance].tintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"gradientSmall"]]; 
// UIControlSegment: Change the colours to just white 
// @url https://stackoverflow.com/a/21484829/4027036 
[[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[Ui getColour:UI_BODY_PRIMARY]} 
               forState:UIControlStateNormal]; 
+0

Können Sie die Codezeile posten, wo Sie diesen Absturz haben? – Sujania

+0

@Sujania Nein, weil ich nicht sicher bin, woher es tatsächlich kommt - ich kann es nicht reproduzieren, und die Stack-Trace zeigt auch nicht an wo. – cjhill

+0

nach meinem Lesen ist dies der Fehler mit UIAperence oder [UIColor colorWithPatternImage:] – Nik

Antwort

3

nach meiner Lektüre ist dies der Fehler mit UIApperence oder [UIColor colorWithPatternImage:] in ios 6

also überprüfen Sie das in Ihrem Code. Wenn Sie diesen Code in Ihrer App verwenden, verwenden Sie die Volltonfarbe.

hier sind einige der Verbindungen, aus denen ich zu diesem Schluss kam:

1) IOS erro at Posting to Facebook with the native Share dialog - UICGColor encodeWithCoder

2) UIApperance and various crashes

3) UIApperance and various crashes

4) iOS 6 MFMailComposeViewController: Only support RGBA or the White color space, this method is a hack

+0

Es ist möglich, ich bin 'colorWithPatternImage' in' UIAperence' setzen ... aber die App ist nur unter iOS 7+, und Crashlytics meldet es als nur Absturz auf iOS 9-Geräten (9.0, 9.0.2 und 9.1). – cjhill

+0

werden Sie bitte einen Code darüber schreiben, für welches Steuerelement Sie UIAppearance festlegen. können Sie versuchen, Aussehen wie folgt einzustellen. [[UINavigationBar Aussehen] setBackgroundImage: [UIImage imageNamed: @ "nav_bar"] forBarMetrics: UIBarMetricsDefault]; – Nik

+0

Sicher, habe meinen ursprünglichen Beitrag geändert - es ist am unteren Rand. – cjhill

1

Ihr Problem ist, dass Musterfarben nicht über die Implementierung von NSCoding codiert werden können. Ihr Farbraum ist kCGColorSpaceModelPattern der, wie die Nachricht sagt, NSCoding bricht und daher nicht erlaubt ist.

Dies sprengt
UIColor* color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"whatever"]]; 
NSData* data = [NSKeyedArchiver archivedDataWithRootObject:color]; 

in [UIColor encodeWithCoder] mit dem gleichen assert failure:

kann durch Ausführen dieses Codes Dieses trivally nachgewiesen werden.

Warum UIColors überhaupt codiert werden, ist das weniger klar. Etwas mit _UIAppearanceRecorder am wahrscheinlichsten zu tun, aber Gott weiß was. Hören Sie einfach auf, Musterfarben zu verwenden, und Sie sollten in Ordnung sein.

Verwandte Themen