2

ボードを検索して検索しましたが、これを理解できません。シンプルで目の前にあるものでなければなりません。

コードをクリーンアップして、より再利用できるようにしようとしています。UIViewControllerから機能するUIActionSheetコードを取得し、独自のオブジェクトファイルを作成していました。UIActionSheetDelegateメソッドを追加するまでは、正常に機能します。

ボタンが押されると、actionSheetCancelメソッドを起動する代わりに、スタックトレースなしでクラッシュします。毎回。

私のコードは以下の通りです。どんな助けでもいただければ幸いです。xcodeストーリーボードツールを使用して物事を接続していないためだと思いますが、これは合法だと思います。

egcTestSheet.h:

#import <UIKit/UIKit.h>

@interface egcTestSheet : NSObject <UIActionSheetDelegate> {

}

- (void) showSheet:(UITabBar *) tabBar
    displayTitle:(NSString *) name;

@end

egcTestSheet.m

#import "egcTestSheet.h"

@implementation egcTestSheet

-(void) showSheet:(UITabBar *)tabBar displayTitle:(NSString *)name{

    UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:name
                                                      delegate:self
                                             cancelButtonTitle:@"Done"
                 destructiveButtonTitle:@"Cancel"otherButtonTitles:nil];

   [menu showFromTabBar:tabBar];
   [menu setBounds:CGRectMake(0,0,320, 700)];

}

// actionsheet delegate protocol item
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex: (NSInteger)buttonIndex{

    NSLog(@"button index = %d", buttonIndex);
}


- (void)actionSheetCancel:(UIActionSheet *)actionSheet{

    NSLog(@"in action canceled method");
}

@end

UIViewControllerオブジェクトからコードを呼び出す:

egcTestSheet *sheet = [[egcTestSheet alloc] init];

[sheet showSheet:self.tabBarController.tabBar displayTitle:@"new test"];
4

1 に答える 1

6

アクションシートは、却下されたためにリリースされている可能性があります(ARCを使用していますか?)。これは、代理人に電話をかけて解雇/選択を通知しようとすると、自分自身に電話をかけようとしていることを意味します。自己はリリースされているので、この時点ではダングリングポインタです。

このアクションシートを表示/呼び出すViewControllerで、アクションシートへの参照を保持するプロパティを設定します。アクションシートの却下時にプロパティをnilに設定します。

于 2012-07-01T19:50:11.393 に答える