2012-07-16 2 views
1

Twitter, Facebook, 이메일 및 인쇄물을 공유하기 위해 공유 버튼이있는 UIActionSheet를 구현하려고합니다. 여기 UIActionSheet의 버튼을 클릭하면 내 앱이 충돌합니다.

여기
@interface ShareViewController : UITableViewController <UIActionSheetDelegate, MFMailComposeViewControllerDelegate> 
@property (nonatomic, strong) NSMutableDictionary *services; 
@property (strong, nonatomic) UIActionSheet *actionSheet; 
@property (strong, nonatomic) id <ShareViewControllerDelegate> delegate; 
@property (nonatomic, strong) UIPopoverController *popCon; 
@property (nonatomic, strong) NSString *serviceTitle; 

-(IBAction)loadActionSheet:(id)sender; 
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex; 
- (void)tweetThis; 
- (void)printThis; 
- (void)openMail; 
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error; 


@end 

다음과 같이 I 메인보기 controller.m 내 주 뷰 컨트롤러를 initiaalising MA 내 주보기 controller.m

-(IBAction)loadActionSheet:(id)sender{ 
if (self.actionSheet) { 
      // do nothing 
} 
else { 
UIActionSheet *sharing = [[UIActionSheet alloc] 
          initWithTitle:nil 
          delegate:self 
          cancelButtonTitle:nil 
          destructiveButtonTitle:nil 
          otherButtonTitles:@"Twitter", @"Facebook", @"Email", @"Print", nil]; 

[sharing showFromBarButtonItem:sender animated:YES]; 
} 
} 

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 

    NSLog(@"Button index: %d",buttonIndex); 
switch (buttonIndex) { 
    case 0: 
     [self tweetThis]; 
     break; 
    case 1: 
     [self sendToFacebook]; 
     break; 
    case 2: 
     NSLog(@"email"); 
     [self openMail]; 
     break; 
    case 3: 
     NSLog(@"Print"); 
     [self printThis]; 
     break; 
    default: 
     NSLog(@"Error"); 
     break; 
} 
} 

내 주보기 controller.h입니다 :

- (IBAction)shareButtonTapped:(id)sender { 

ShareViewController *svc = [[ShareViewController alloc] initWithStyle:UIActionSheetStyleDefault]; 
[svc loadActionSheet:(id)sender]; 

} 

조치 시트를 열어도 좋지만 버튼 중 하나를 클릭하면 애플 리케이션을 유골. 왜 어떤 아이디어?

+0

오류 로그를 제공 할 수 있습니까? – Garoal

+0

당신은 또한'self.actionsheet = [[UIActionSheet alloc] init ...];을 실행해야합니다. ' – jacerate

+0

jacerate, 저도 고마워요. 그래도 주요 문제는 여전히 지속됩니다. –

답변

1

이것은 메모리 관리 문제 일 가능성이 큽니다. ARC를 사용하는 것처럼 보이므로 shareButtonTapped 메소드가 반환 된 후 ARC는 더 이상 참조되지 않으므로 svc을 자동으로 해제합니다. 액션 시트의 델리게이트 속성은 weak이므로, 이것도 그대로 유지되지 않습니다.

실제로보기가로드되지 않는 것처럼 항상 ShareViewController이보기 컨트롤러 인 이유를 모르지만 이유가있을 수 있습니다. 어떤 경우이든 해당 컨트롤러를 strong 다른 (주) 뷰 컨트롤러의 속성 또는 인스턴스 변수이므로 작업 시트가 완료되기 전에 자동으로 해제되지 않습니다.

+0

고맙습니다. 나는 이것을 지금 시도 할 것이다. 당신 말이 맞아요, ShareViewController의 초기 목적이 바뀌었기 때문에 더 이상 뷰 컨트롤러가 필요하지 않습니다. 지금 NSObject로 변경하고 메인 뷰 컨트롤러의 인스턴스 변수를 만듭니다. –

1

예. .xib 파일로 이동하십시오.

당신은 모든 버튼을보아야합니다.

버튼을 클릭하고 "연결 검사기"

참조하는 콘센트를 삭제로 이동합니다.

참조하는 콘센트를 단추로 끌어서 단추를 원하는 "ID"로 설정하십시오.

제가 작동하는지 알려주세요.

+0

죄송합니다.이 질문이 멍청한 질문이지만 프로그래밍 방식으로 작업 시트를 작성하고 있습니다. 액션 시트 또는 액션 시트 내의 버튼을 실행하기 위해 클릭하는 버튼을 말하고 있습니까? 액션 시트를 실행하는 버튼은 .xib 파일에 있지만, 지금은 괜찮습니다. –

0

그냥 바보 같은 대답 - 같은 방법 - (void) sendToFacebook; 구현 되었습니까?

+0

그들은 그렇습니다. 나는 더 쉽게 읽을 수 있도록 그들을 버렸습니다. 나는 그들이 전화를 받았는지보기 위해 그것을 디버깅했고, 그렇지 않았다. –

관련 문제