【发布时间】: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