按钮上的EXC错误访问单击

时间:2013-07-27 20:31:19

标签: xcode memory-management exc-bad-access

彻底难倒。 我在其中打开一个带有视图控制器的操作表,当我单击视图控制器中的按钮以启动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.m文件,IBAction在其中启动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的viewdidload中没有任何内容。每当我点击附加到“推文”动作的按钮时,我就会收到EXC Bad Access错误。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

当您创建ExportVC对象并将其添加到actionSheet时,只要方法终止,虽然视图已添加到actionSheet,但是没有对viewController的引用。因此,viewController由于保留计数为0而被销毁,并且当您触发tweet:(id)sender方法时,带有该方法的viewController不再存在,因此您得到EXC_BAD_ACCESS

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