线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x70745092)

时间:2012-10-12 00:41:06

标签: iphone objective-c ios6

正如标题所说,我的代码中出现了这个错误。除了通常的(lldb)之外没有输出。它指向的行是

  

0x10df051:movl 8(%edx),%edi0x10df051:movl 8(%edx),%edi

代码本身是

DeltaViewController *deltaview = [[DeltaViewController alloc] initWithNibName:@"DeltaViewController" bundle:nil];

当我在我的选择器中选择了一个对象并且它应该添加一个子视图时发生了。

1 个答案:

答案 0 :(得分:2)

deltaview是DeltaViewController类型,因此它是一个控制器,而不是一个视图。在将其添加为self.view([self.view addSubview:deltaview.view];)的子视图后,您可以释放deltaview。然后,每当您将方法(在DeltaViewController中实现)发送到deltaview时,您当然会收到此EXC_BAD_ACCESS错误。

一个简单的解决方案:只需将deltaview(实际上,它应该是deltaViewController)声明为iVar而不是局部变量。


编辑:

嗯,这是一个简单的代码片段:

YourViewController.h:

@interface YourViewController : UIViewController

@property DeltaViewController *deltaViewController;

@end

YourViewController.m:

@implementation YourViewController

@synthesize deltaViewController;
...

- (void)aMethod;

@end

- (void)dealloc {
  self.deltaViewController = nil; // set it to nil & release it after yourViewController dealloced.
  [super dealloc];
}

- (void)aMethod {
  DeltaViewController *deltaViewController = [[DeltaViewController alloc] initWithNibName:@"DeltaViewController" bundle:nil];
  // ...(setup deltaViewController)
  self.deltaViewController = deltaViewController; // it'll retain deltaViewController
  [deltaViewController release];

  ...
}