2015-10-26 15 views
8

更新日2015年10月29日:この原因が考えられた可能性があります。 this StackOverflow postに準拠したグラデーションレイヤーを作成しています。これは私と他のすべての人がテストしたところでは問題なく動作しますが、他の人には問題があるかもしれません。iPhoneアプリのクラッシュ: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]; 
アップデート2015年10月27日:それでもCrashlyticsから入ってくるこれらのクラッシュを見て。


を更新2015年10月26日:私は、(..しかし、誰の答えと)私が午前とまったく同じ問題であるように思われthis thread on StackOverflowを見つけましたが、彼らは私がFacebookの/ Twitterのアクションシートを使用していますない。問題の診断に役立つもの。それだけのiOS 9 で登場だと思わ


はちょうどApp Storeにアプリをリリースしているし、我々はCrashlyticsにこのクラッシュをユーザーの小さな割合(約2%)を見ていますですが、それはすべてのデバイスに起こっています。

致命的例外:NSInternalInconsistencyExceptionこの状況では、RGBAまたはホワイトの色空間のみがサポートされています。

個人的に私は9.1でiPhone 6を実行していますが、この問題は発生していません。私もシミュレータで試してみましたが、もう問題はありません。だから、このバグがどうやって起こっているのか分かりません。 Crashlyticsのスタックトレースは以下の通りです。

UIColorがエンコードされずにNSDictionaryに追加されているようですが、アプリのどこでもそのことをやっていません。それはUIRemoteViewControllerと関係があるようにも思えるが、私はアプリでそれを使っていない。(Facebookにログインしない限り、電話やシミュレータでFacebookにログインしようとしたが、このエラーが表示されます)。

これを引き起こしている可能性のある人はいますか?


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 

コード例で更新

これはapplication:didFinishLaunchingWithOptionsに呼び出されます。

// 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

このクラッシュが発生している場所でコード行を投稿できますか? – Sujania

+0

@Sujaniaいいえ、実際にどこから来ているのか分かりません。再現できず、スタックトレースにはどこにも表示されません。 – cjhill

+0

私の読書によると、これはUIApperenceや[UIColor colorWithPatternImage:]のエラーです。 – Nik

答えて

3

これはUIApperenceまたは[UIColorとの誤差である私の測定値ごとにcolorWithPatternImage:] in ios 6

あなたのコードでそれを確認してください。あなたのアプリにそのコードがあれば、ソリッドカラーを使用してください。ここ

私はこの結論に来ているからリンクのほんの一部です:

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

これは可能ですが、私は 'UIApperence'に' colorWithPatternImage'を設定しています...しかし、アプリケーションはiOS 7+でのみ利用でき、CrashlyticsはそれをiOS 9デバイス(9.0,9.0.2、および9.1)でクラッシュする – cjhill

+0

UIAppearanceを設定しているコントロールについて、いくつかのコードを投稿してください。 このような外観を設定できます。 [UINavigationBarの外観] setBackgroundImage:[UIImage imageNamed:@ "nav_bar"] forBarMetrics:UIBarMetricsDefault; – Nik

+0

確かに、私の元のポストを修正しました - それは底にあります。 – cjhill

1

あなたの問題は、UIColor'sの実装でNSCodingを使ってパターンの色をエンコードできないということです。彼らの色空間はkCGColorSpaceModelPatternであり、メッセージによると、NSCodingが壊れているため、許可されていません。

これはtrivallyこのコードを実行することによって証明することができます。

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

これは、同じアサート失敗と[UIColor encodeWithCoder]に吹きます。

なぜUIColorsがコード化されているのかは、それほど明確ではありません。おそらく_UIAppearanceRecorderと何か、しかし主は何を知っていますか。ちょうどパターンの色を使用して停止し、あなたは上手くいくはずです。

関連する問題