彻底难倒。 我在其中打开一个带有视图控制器的操作表,当我单击视图控制器中的按钮以启动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错误。 任何帮助将不胜感激。
答案 0 :(得分:2)
这也是我以前遇到过的一个问题。它与ARC释放内存的方式有关。
当您创建ExportVC
对象并将其添加到actionSheet时,只要方法终止,虽然视图已添加到actionSheet,但是没有对viewController的引用。因此,viewController由于保留计数为0而被销毁,并且当您触发tweet:(id)sender
方法时,带有该方法的viewController不再存在,因此您得到EXC_BAD_ACCESS
我能够解决这个问题的方法是创建一个对viewController的引用,我在创建alertSheet的类中创建它并将其设置为viewController,以便它不会被释放。