【问题标题】:iOS app crashes when home button is pressed (when app is suspended)按下主页按钮时iOS应用程序崩溃(当应用程序暂停时)
【发布时间】:2014-03-27 11:20:09
【问题描述】:

该应用程序运行良好,但无法暂停。每当我按下主页按钮时,应用程序就会崩溃并显示以下堆栈跟踪:

2014-03-27 12:00:31.413 ProjName[2598:60b] -[__NSCFDictionary animationForKey:]:
unrecognized selector sent to instance 0x17ee4cc0
2014-03-27 12:00:31.415 ProjName[2598:60b] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-[__NSCFDictionary animationForKey:]: 
unrecognized selector sent to instance 0x17ee4cc0'
*** First throw call stack:
(0x2fc9cfd3 0x3a77fccf 0x2fca0967 0x2fc9f253 0x2fbee7f8 0x324caf01 0x324b9d83 0x3250e7b9  0x2fc5f1f1 0x2fbd357f 0x305bda3d 0x3253bdcd 0x324bdca5 0x324bd871 0x32521cc9 0x34acbaed 0x34acb6d7 0x2fc67ab7 0x2fc67a53 0x2fc66227 0x2fbd0f4f 0x2fbd0d33 0x34aca663 0x3251c16d 0x10f759 0x3ac8cab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

最终用户在按下主页按钮时不会注意到崩溃。但是,当应用程序应该恢复时,它会再次重新启动。没有显示错误消息,因此用户可能认为应用程序工作正常。这可能是什么问题?

编辑: 这是在 main.m 的支持文件中引发异常的地方(EXC_BAD_ACCESS 代码=1):

int main(int argc, char * argv[])
{
    @autoreleasepool {
       return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

编辑2: 我现在找到了导致问题的原因,但我仍然想知道为什么?如果我创建一个 UIView 并将其添加到 drawRect 中,就会出现问题。

- (void)drawRect:(CGRect)rect {
    [self.layer setSublayers:nil];

    activityView = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityView.center=CGPointMake(200, 200);
    [activityView startAnimating];
    [self addSubview:activityView];
}

可以通过像这样添加带有此 drawRect 的 UIView 来重现此错误。有人可以解释这种行为吗?

- (void)viewDidLoad
{
   totalMeter = [[UIViewTest alloc] initWithFrame:CGRectMake(0, 80, 320.0, 320.0)];
   [self.view addSubview:totalMeter];

}
- (void)viewDidAppear:(BOOL)animated
{
   [totalMeter setNeedsDisplay];
} 

【问题讨论】:

  • 尝试在 Xcode 中添加异常断点,以便它会显示应用程序崩溃的行。
  • 我希望这会起作用,但不,它显示了同一行。这是在 main.m @autoreleasepool
  • @Zeezer 你能显示堆栈跟踪吗?当 appdelegate didEnterBackground 方法时,您是否正在尝试做某事?
  • 我发现了问题,请参阅我的编辑。但是,我不明白为什么会这样。
  • 删除[self.layer setSublayers:nil]; 是否可以防止它崩溃?

标签: ios iphone objective-c ios7 crash


【解决方案1】:
[__NSCFDictionary animationForKey:]: unrecognized selector sent to instance

问题在于,当您的应用程序进入后台时,您在某处对类型字典的值调用 animationForKey 方法时,并没有实现该方法。

【讨论】:

  • 什么会产生这种行为,当应用程序进入我知道的后台时,我什么都不做。
  • 我认为你必须添加一些代码,我不知道你的应用程序是如何工作的,如果不阅读一些代码我无法帮助你。
  • 从上面的例子可以看出。这可以重现,并且不涉及对 animationForKey 的任何方法调用。
  • 我会在测试应用程序中尝试一下,希望能找到错误:)
【解决方案2】:

如果您使用AFNetworking framework 并包括UIActivityIndicatorView+AFNetworking.h,我认为这是一种指责。我什至在我的工作中发生过。

所以,如果您不使用UIActivityIndicatorView+AFNetworking.h,只需将其从您的项目中删除,然后重新构建您的项目,一切都会好起来的。祝你好运。

这是github中的问题AFNetworking issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多