UIActivityIndi​​catorView 仅在发布模式下崩溃

UIActivityIndicatorView crashes on release mode only

我通过执行以下操作在我的导航栏中放置了一个 UIActivityIndi​​catorView。

在.h文件中

@property (strong, nonatomic) UIActivityIndicatorView *mySpinner;

在 .m 文件中

- (void)viewDidLoad
{
    [super viewDidLoad];

    _mySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    _mySpinner.translatesAutoresizingMaskIntoConstraints = NO;
    _mySpinner.hidesWhenStopped = YES; 
    UIBarButtonItem *spinnerButton = [[UIBarButtonItem alloc] initWithCustomView:_mySpinner];
    self.navigationItem.rightBarButtonItem = spinnerButton;
    [_mySpinner startAnimating];

    //some other stuff
}

这对 iOS 7 和 iOS 8 这两个我定位的系统都非常有效。 App 去苹果审核,通过,现已上架 App Store。所以我从商店下载它到我的 phones (运行ning iOS 8) 上,然后下载到另一个 phone 运行ning iOS 7 当我使用 UIActivityIndi​​catorView 进入屏幕时它崩溃了。我在发布模式下重新启动 Xcode 和 运行 应用程序,并且能够使其再次崩溃。这是消息。

Assertion failure in -[UINavigationBar layoutSublayersOfLayer:]

还有这个

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

我试过调用 layoutSublayersOfLayer,但没有成功。我还尝试在 UIActivityIndi​​catorView 上使用自动布局,但这告诉我我还不能对此施加限制,因为视图还没有准备好。

但是,如果我创建一个新项目并 运行 它,UIActivityIndi​​catorView 会工作,就像我提交我的应用程序之前一样。我什至 运行 也在发布模式下进行测试。我删除了派生数据,清理,构建,重新启动,重新启动。但是现在,在 iOS 7 中,如果我添加 UIActivityIndi​​catorView,应用程序将始终崩溃。有没有人对正在发生的事情有任何见解?我几乎已经从 viewDidLoad 方法中删除了所有内容,以查看是否是其他原因导致的,但无济于事。任何帮助,将不胜感激。现在我正在使用 if then 语句来检查 iOS 是 7 还是 8,如果是 8 我添加指示器,但我真的不想这样做。谢谢!!

我发现我的问题与 THIS 的问题非常相似,但没有任何答案或评论。

如果您打算将 initWithCustomView:UIBarButtonItem 用于导航控制器栏按钮项目,您应该允许它设置自己的约束(通过不设置 translatesAutoresizingMaskIntoConstraints = NO) ,或者你必须自己布置。

在大多数情况下,可以在您要用作按钮的自定义视图的视图的子视图上完成自动布局,然后您可以通过不设置 translatesAutoresizingMaskIntoConstraints = NO.