3

私は のUITableView中に を持っていUITabBarControllerます。

私が電話しているとき

[[self navigationController] pushViewController:myViewController animated:YES];

問題はない。

しかし、UIActionSheetDelegateたとえば、 a 内から同じ行を呼び出している場合:

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

私は得るEXC_BAD_ACCESS

この問題を引き起こしている別のスレッドからこの行を呼び出しているようです。

EXC_BAD_ACCESSこの問題を防ぐにはどうすればよいですか?

(myViewController は nil などではないことに注意してください)

ありがとう!

4

4 に答える 4

4

EXC_BAD_ACCESSリリースされたオブジェクトにアクセスしようとするとスローされactionSheet:clickedButtonAtIndex:、アクションシートが閉じられた後にメインスレッドで呼び出されるので、何が指されているかmyViewControllerがリリースされると推測しています。

nil実際、それが問題である必要はありません。指されたオブジェクトは解放されますが、ポインターは解放されませんnil

于 2010-03-01T15:43:14.923 に答える
1

私はちょうど同じ問題を抱えていました、そして私はそれを割り当てたときに私がメンバー変数を自分で暗殺しなかったということでした。

これにより問題が発生しました:(myTestViewControllerはクラスメンバーです)

TestViewController* test = [[TestViewController alloc] init];
    myTestViewController = testViewController;
    [testViewController release];
        [[self navigationController] pushViewController:myTestViewController animated:YES];

しかし、私がクラスのメンバーを変えて自分で助けたとき、それはうまくいきました。

TestViewController* test = [[TestViewController alloc] init];
    self.myTestViewController = testViewController;
    [testViewController release];
        [[self navigationController] pushViewController:myTestViewController animated:YES];
于 2011-02-10T09:13:23.583 に答える
0

tnx。

UIActionSheet は、MainRootViewController というクラス内から呼び出されます。

myViewController は、このクラス (MainRootViewController) のメンバーです。

完全なコードは次のとおりです。

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

myViewController = [[myViewController alloc] init];

[[self navigationController] pushViewController:myViewController animated:YES];

 }
于 2010-03-01T15:56:15.900 に答える