1

徹底的に困惑。ビュー コントローラを含むアクション シートを開き、ビュー コントローラのボタンをクリックして SLComposeViewController を起動すると、エラーが発生します。

これは、View Controller を含むアクション シートを初期化する方法です。

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

IBAction が SLComposeViewController を起動する ExportVC.m ファイルは次のとおりです。

#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 エラーが発生します。どんな助けでも大歓迎です。

4

1 に答える 1

2

これは私も以前から抱えていた問題です。これは、ARC がメモリを解放する方法に関係しています。

オブジェクトを作成ExportVCしてactionSheetに追加すると、メソッドが終了するとすぐに、ビューがactionSheetに追加されますが、viewControllerへの参照はありません。このため、保持カウントが 0 であるために viewController が破棄され、tweet:(id)senderメソッドを起動すると、メソッドを持つ viewController が存在しなくなるため、EXC_BAD_ACCESS

これを修正できた方法は、alertSheet を作成するクラスで作成している viewController への参照を作成し、解放されないようにそれを viewController に設定することです。

于 2013-07-27T21:14:35.253 に答える