2013-07-27 5 views
1

Тщательно тупик. Я открываю панель действий с контроллером представления в ней, и когда я нажимаю кнопку в контроллере представления для запуска SLComposeViewController, я получаю ошибку.EXC Плохой доступ к кнопке Нажмите

Это, как я инициализировать лист действий с контроллера представления в нем:

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]; 
} 
} 

Соединения прекрасные. У меня нет ничего в viewdidload ExportVC. Однако, когда я нажимаю кнопку, прикрепленную к действию «твит», я получаю ошибку EXC Bad Access. Любая помощь будет оценена по достоинству.

ответ

2

Это проблема, которая у меня была и раньше. Это связано с тем, как ARC выпускает память.

Когда вы создаете свой объект ExportVC и добавляете его в файл actionSheet, как только метод завершается, хотя представление добавляется к элементу actionSheet, ссылка на viewController отсутствует. Из-за этого, ViewController разрушается из-за наличия удержания счета 0, а когда вы стреляете метод tweet:(id)sender, то ViewController с методом, больше не существует, следовательно, вы получаете EXC_BAD_ACCESS

так, как я был в состоянии Исправьте это, создав ссылку на viewController, которую я создаю в классе, который создает alertSheet и устанавливает его в viewController, чтобы он не освобождался.

+0

Как вы думаете, вы могли бы привести пример кода? – user1520507

+0

в файле .h файла viewController, который создает ActionSheet, вы можете добавить что-то по строкам: '@property (nonatomic, strong) ExportVC * exportView', а затем, когда вы создаете файл actionSheet:' self.exportView = innerView'. – Jsdodgers

+0

Это прекрасно работает. Я ценю это – user1520507

Смежные вопросы