1

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

0x10df051: 移动 8(%edx), %edi0x10df051: 移动 8(%edx), %edi

代码本身是

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

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

4

1 回答 1

2

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

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


编辑:

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

你的视图控制器.h:

@interface YourViewController : UIViewController

@property DeltaViewController *deltaViewController;

@end

你的视图控制器.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];

  ...
}
于 2012-10-12T03:12:29.110 回答