【发布时间】:2012-09-01 03:47:04
【问题描述】:
我有一个接收远程通知的应用。推送后显示的我的视图控制器有一个表格视图。应用程序在行设置框架处非常随机地崩溃(20 次尝试中的 1 次):
if (!myTableView) {
NSLog(@"self.myTableView is nil");
}
myTableView.frame=CGRectMake(0, 70, 320, 376);
只有当我打开应用程序,然后打开其他一些应用程序,然后收到推送通知时才会发生这种情况。我想这与记忆有关。我使用ARC(ios 5)。奇怪的是nslog没有显示,所以tableview不是nil。
崩溃日志:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x522d580c
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x352b1f7e objc_msgSend + 22
1 Foundation 0x37dc174c NSKVOPendingNotificationCreate + 216
2 Foundation 0x37dc1652 NSKeyValuePushPendingNotificationPerThread + 62
3 Foundation 0x37db3744 NSKeyValueWillChange + 408
4 Foundation 0x37d8a848 -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 176
5 Foundation 0x37e0ca14 _NSSetPointValueAndNotify + 76
6 UIKit 0x312af25a -[UIScrollView(Static) _adjustContentOffsetIfNecessary] + 1890
7 UIKit 0x312cca54 -[UIScrollView setFrame:] + 548
8 UIKit 0x312cc802 -[UITableView setFrame:] + 182
9 POViO 0x000913cc -[FeedVC viewWillAppear:] (FeedVC.m:303)
Dealloc 没有被调用,因为它没有被记录:
- (void)dealloc {
NSLog(@"dealloc");
}
【问题讨论】:
-
看到
if (nil != myTableView)的结果会让我安心 -
另外,请尝试按照此处所述打开僵尸:stackoverflow.com/questions/5386160/…
-
myTableView 很可能已被释放
-
在打开僵尸时遇到问题,因为要接收推送通知,它必须使用分发配置文件运行,因此无法使用僵尸进行配置。
-
如果您在 iOS 4 上运行并使用 ARC,应用程序可能会因为内存问题而随机崩溃。虽然 ARC 不是 OS 的选项,而是编译器的选项,但它在 iOS 4 上仍然无法正常工作。你的 iOS 版本是什么?
标签: iphone objective-c crash exc-bad-access