1

Twitter、Facebook、電子メール、および印刷物に共有するための共有ボタンがいくつかある UIActionSheet を実装しようとしています。

ここに私の共有View Controller.hがあります

@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

これが私の共有View 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.m で共有ビュー コントローラーを初期化します。

- (IBAction)shareButtonTapped:(id)sender {

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

}

アクション シートは正常に開くことができますが、いずれかのボタンをクリックするとアプリがクラッシュします。理由についてのアイデアはありますか?

4

3 に答える 3

1

これは、メモリ管理の問題である可能性が最も高いです。ARC を使用しているようです。メソッドが戻った後、どこにも参照されていないためshareButtonTapped、ARC は自動的に を解放します。svcアクション シートのデリゲート プロパティはweakであるため、それによっても保持されません。

ShareViewControllerビューをロードしていないように見えるため、そもそもビューコントローラーである理由はよくわかりませんが、理由があるかもしれません...いずれにせよ、そのコントローラーをstrongプロパティまたはインスタンス変数にする必要がありますアクションシートが終了する前に自動的に解放されないように、他の(メイン)View Controller。

于 2012-07-16T21:15:15.450 に答える
1

はい。.xib ファイルに移動します。

持っているすべてのボタンが表示されます。

ボタンをクリックして、「接続インスペクター」に移動します

参照アウトレットを削除します。

参照アウトレットをボタンにドラッグし、ボタンを必要な「ID」に設定します。

それがうまくいくかどうか教えてください。

于 2012-07-16T20:37:28.187 に答える
0

ばかげた答え - (void) sendToFacebook; のようなメソッド 実装されていますよね?

于 2012-07-16T20:38:26.397 に答える