甚至在应用程序之前,我的应用程序在iPad上崩溃:didFinishLaunchingWithOptions:

在iPad上运行时,我的应用崩溃了以下crashlog。 它在iPhone设备上正常工作。 您可能会注意到,它在尝试设置窗口时崩溃。 我到处search,但没有看到任何其他话题的问题。

感谢您的帮助。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: NSParagraphStyle)' *** First throw call stack: ( 0 CoreFoundation 0x000000010e38ff35 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010e028bb7 objc_exception_throw + 45 2 CoreFoundation 0x000000010e296998 -[__NSDictionaryM setObject:forKey:] + 968 3 UIKit 0x000000010ca99d2d -[UILabel _setLineBreakMode:] + 529 4 UIKit 0x000000010cb7a572 -[UIButtonLabel setLineBreakMode:] + 93 5 UIKit 0x000000010cb86e5c -[UIButton _setupTitleViewRequestingLayout:] + 308 6 UIKit 0x000000010cb7ed15 -[UIButton titleLabel] + 51 7 UIKit 0x000000010cd3c6d8 -[UIZoomViewController loadView] + 476 8 UIKit 0x000000010c9f67f9 -[UIViewController loadViewIfRequired] + 75 9 UIKit 0x000000010c9f6c8e -[UIViewController view] + 27 10 UIKit 0x000000010cd3bfa4 -[UIZoomViewController init] + 78 11 UIKit 0x000000010cd39eeb -[UIClassicController _setupWindow] + 544 12 UIKit 0x000000010cd39b7c +[UIClassicController sharedClassicController] + 140 13 UIKit 0x000000010c8e47dd -[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:] + 666 14 UIKit 0x000000010c8e42ae __88-[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:]_block_invoke + 138 15 UIKit 0x000000010c8e4215 -[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:] + 349 16 UIKit 0x000000010c8cf31a -[UIApplication scene:didUpdateWithDiff:transitionContext:completion:] + 486 17 UIKit 0x000000010c8cedb8 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 336 18 FrontBoardServices 0x000000011064f612 __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 265 19 FrontBoardServices 0x000000011065e2a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16 20 CoreFoundation 0x000000010e2c553c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 21 CoreFoundation 0x000000010e2bb285 __CFRunLoopDoBlocks + 341 22 CoreFoundation 0x000000010e2bb045 __CFRunLoopRun + 2389 23 CoreFoundation 0x000000010e2ba486 CFRunLoopRunSpecific + 470 24 UIKit 0x000000010c8ce669 -[UIApplication _run] + 413 25 UIKit 0x000000010c8d1420 UIApplicationMain + 1282 26 Edyn 0x0000000109704323 main + 115 27 libdyld.dylib 0x000000010ebd2145 start + 1 28 ??? 0x0000000000000001 0x0 + 1 ) 

编辑1

这个问题比我想象的更复杂。 这是我所做的。

  1. 实现的方法在[UIButtonLabel setLineBreakMode:]附近搅拌,以便我可以看到是什么导致使用nil为LineBreakMode。 我发现如果lineBreakMode被设置为NSLineBreakByWordWrapping之外的东西,它最终会崩溃。
  2. 要暂时使它工作,我迫使lineBreakMode NSLineBreakByWordWrapping在这种情况下,这不是一个大问题,因为标签是从来没有在我的应用程序。

编辑2

修复了lineBreakMode的问题后,我现在得到了同样的问题,但这一次[UILabel setShadow:]。 请注意,它会在标签上崩溃,因为我没有对阴影属性(颜色,偏移量或blurRadius)进行任何更改。 我也遇到同样的问题,但是这次使用paragraphStyle

这意味着我不能不使用这种方法,因为它似乎是在发生的事情中被破坏的东西。

编辑3

当我将应用程序的部署目标更改为通用时,我没有任何上述问题。

我把这两个function凌驾于一个类别上,猜测是什么? 这些function似乎甚至在你的AppDelegate中的应用程序的控制之前,由ios调用。 由于某种原因在ipad上这个返回零。 删除类别解决了问题。

 + (id)systemFontOfSize:(CGFloat)sz { return [UIFont fontWithName:@"HelveticaNeue-Regular" size:sz]; } + (id)boldSystemFontOfSize:(CGFloat)sz { return [UIFont fontWithName:@"HelveticaNeue-Bold" size:sz]; }