Xcode EXC按钮单击时访问错误

Xcode EXC按钮单击时访问错误,xcode,memory-management,exc-bad-access,Xcode,Memory Management,Exc Bad Access,完全被难住了。 我打开一个包含视图控制器的操作表,当我单击视图控制器中的按钮以启动SLComposeViewController时,我得到了错误 以下是如何初始化包含视图控制器的操作表: UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self

完全被难住了。 我打开一个包含视图控制器的操作表,当我单击视图控制器中的按钮以启动SLComposeViewController时,我得到了错误

以下是如何初始化包含视图控制器的操作表:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                         delegate:self
                                                cancelButtonTitle:nil

                                           destructiveButtonTitle:nil
                                                otherButtonTitles:@"1",@"2",nil];
[actionSheet setBounds:CGRectMake(0,0, 320, 285)];
ExportVC*innerView = [[ExportVC alloc] initWithNibName:@"ExportVC" bundle:nil];
innerView.view.frame = actionSheet.bounds;
[actionSheet addSubview:innerView.view];

[actionSheet showFromTabBar:self.tabBarController.tabBar];
这是ExportVC.h文件:

#import <UIKit/UIKit.h>
#import <Social/Social.h>


@interface ExportVC : UIViewController{
}

- (IBAction)tweet:(id)sender;


@end
#导入
#进口
@接口ExportVC:UIViewController{
}
-(IBAction)推特:(id)发送者;
@结束
下面是ExportVC.m文件,iAction在其中启动SLComposeViewController:

#import "ExportVC.h"
#import <Social/Social.h>


@interface ExportVC ()

@end

@implementation ExportVC



-(IBAction)tweet:(id)sender{
NSLog(@"button works");
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
    SLComposeViewController* tweetSheet = [SLComposeViewController
                                           composeViewControllerForServiceType:SLServiceTypeTwitter];
    [tweetSheet setInitialText:@"Hi"];
    [self presentViewController:tweetSheet animated:YES completion:nil];
}
}
#导入“ExportVC.h”
#进口
@接口ExportVC()
@结束
@ExportVC的实现
-(iAction)推特:(id)发送者{
NSLog(“按钮工作”);
如果([SLComposeViewController可用于服务类型:SLServiceTypeTwitter])
{
SLComposeViewController*tweetSheet=[SLComposeViewController
服务类型的ComposeViewController:SLServiceTypeTwitter];
[tweetSheet setInitialText:@“嗨”];
[self-presentViewController:tweetSheet动画:是完成:无];
}
}
连接良好。我在ExportVC的viewdidload中没有任何内容。然而,每当我点击附加到“tweet”操作的按钮时,我就会收到EXC错误访问错误。
任何帮助都将不胜感激。

这也是我以前遇到的问题。这与ARC释放内存的方式有关

当您创建
ExportVC
对象并将其添加到操作表时,只要方法终止,尽管视图已添加到操作表,但没有对viewController的引用。因此,viewController由于保留计数为0而被销毁,当您启动
tweet:(id)sender
方法时,使用该方法的viewController不再存在,因此您将获得
EXC\u BAD\u访问权


我解决这个问题的方法是,在创建alertSheet的类中创建对viewController的引用,并将其设置为viewController,使其不会被释放。

在创建actionSheet的viewController的.h文件中,可以添加以下内容:
@property(非原子,强)ExportVC*exportView
,然后在创建操作表时执行:
self.exportView=innerView
。必须这样做很烦人,但至少它可以工作。在操作表发布时,您可能还希望将该变量设置为
nil
,以便释放内存。几个月前我第一次遇到这个问题时,我我花了几天时间才弄明白发生了什么事。