UIAccelerometer EXC_BAD_ACCESS在设备上崩溃

时间:2010-11-04 15:08:00

标签: iphone objective-c uiaccelerometer

我在实施UIAccelerometer时面临一个奇怪的问题。 我有一个UITableViewController,我不想使用UIAccelerometer,但按下行后我想在UIViewController中激活一个,当我使用模拟器时一切都很好,但是当我使用设备iPhone 3G进行测试时,我得到了EXC_BAD_ACCESS按下返回按钮。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


     ShakeControl *percView = [[ShakeControl alloc] init];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:percView animated:YES];
     [percView release];


}

当我禁用[percView release]时,它工作正常;但它听起来不像解决方案。 任何想法都将不胜感激。

摇动控制实施:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / kUpdateFrequency];
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];

}

- (void)viewDidUnload {
    [super viewDidUnload];

    [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}

THX

3 个答案:

答案 0 :(得分:1)

只有在特定情况下才会调用viewDidUnload方法,例如内存警告。您还必须删除dealloc中的委托。

答案 1 :(得分:0)

解雇后尝试释放它,我不确定pushViewController是否会保留。

答案 2 :(得分:0)

您可以设置环境变量NSZombiesEnabled& NSAutoreleaseFreedObjectCheckEnabled,值为1。 这样可以防止对象真正被释放,然后你应该得到控制台日志,指出过度释放的来源。

您可以使用Run With Performance Tools - >分配后,您知道哪个对象被过度释放,并查看调用保留/释放的每个位置以发现不平衡。