4

我在故事板中有一个视图,我分配了一个名为“MainView”的标识符。但是,如果我添加了以下面的子视图,一切都产生了碰撞(例如按一个按钮)ViewController被取消分配导致崩溃

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainView"]; 
      [self.view addSubview:mvc.view]; 

这是由按键触发的动作:(MainViewController.h)

-(IBAction)showUsername:(id)sender{ 

    [testLabel setText:@"username"]; 

} 

和崩溃日志:

-[MainViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x44e0810 

我使用ARC。

+0

instantiateViewControllerWithIentifier:创建一个自动释放的对象。你必须在这里“继续”,并且“在不再需要时释放它。 – 2012-02-05 18:30:45

+1

我使用ARC,所以调用'retain'不支持... – 2012-02-05 18:40:54

回答

6

处理此问题的最佳方法是使用属性。具体方法如下:

在您的.h文件中:

#import "MainViewController.h" 

@interface MyClass : UIViewController 

@property (strong, nonatomic) MainViewController *mvc; 

@end 

在您.m文件:

#import "MyClass.h" 

@implementation MyClass 

@synthesize mvc; 

// Your code here 
- (void)yourMethodHere { 
    self.mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainView"]; 
    [self.view addSubview:mvc.view]; 
} 
+0

我已经考虑过这样做,但是我使用ARC,所以我不能在任何对象上调用retain。 – 2012-02-05 18:40:19

+1

划伤我说的话......使用属性可以避免你遇到的问题。 – 2012-02-05 18:51:31

+0

谢谢你的工作:) – 2012-02-05 18:54:48