0

私は現在、ユーザーがボタンをクリックすると、そのbuttonPressedを「YES」に設定して新しいビューに移動するアプリに取り組んでいます。この新しいビューでは、色を選択できます。色が選択されると、クリックされたボタンの背景に選択した色で前のビューに戻ります。

コードを実行するとブール値にアクセスできず、SIGBART エラーが発生します。ここで私は何を間違っていますか?私のChangeClothesViewControllerで

@property (assign, readwrite) BOOL pantsPressedBool;
@synthesize pantsPressedBool = _pantsPressedBool;

- (IBAction)pantsPressed:(UIButton *)sender {
ChooseColorsViewController *color = [[ChooseColorsViewController alloc] initWithNibName:@"ChooseColorsViewController" bundle:nil];
[self.navigationController pushViewController:color animated:YES];
//AppDelegate *passColors = (AppDelegate *)[[UIApplication sharedApplication]delegate];
//this code above does nothing and is not even needed. I was testing something out and forgot to take it out

_pantsPressedBool = YES;
}

と私の RectangleView 内 (これは、ボタンの背景を作成するためにボタンの後ろに長方形を作成する場所です)

- (void)drawRect:(CGRect)rect
{
//custom delegate
AppDelegate *passColors = (AppDelegate *)[[UIApplication sharedApplication]delegate];
changeClothes *whichButton = (changeClothes *)[[UIApplication sharedApplication]delegate];

for (int i=0; i < [passColors.getColors count]; i++) {
    if ([[passColors.getColors objectAtIndex:i] isEqualToString: @"Black"]) {
        NSLog(@"what button: %c", whichButton.pantsPressedBool); //HERE
        if (whichButton.pantsPressedBool == YES ) { //AND HERE is where I get the SIGABRT error
            // Drawing code
            CGContextRef context = UIGraphicsGetCurrentContext();
            [[UIColor blackColor] set];
            //CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 0.5); //CGContextRef, Red, Green, Blue, Alpha
            rect = CGRectMake(20, 20, 40, 80); //x, y, width, height
            CGContextFillRect(context, rect); //CGContextRef, CGRect
        }

    }
}
} 

いつものように、どんな助けでも大歓迎です。

前もって感謝します。

[編集]

だから私は何か違うことを試みています。

- (IBAction)pantsPressed:(UIButton *)sender {
ChooseColorsViewController *color = [[ChooseColorsViewController alloc] initWithNibName:@"ChooseColorsViewController" bundle:nil];
[self.navigationController pushViewController:color animated:YES];
AppDelegate *chosenButton = (AppDelegate *)[[UIApplication sharedApplication]delegate];
chosenButton.pantsButton = YES; 
}

だから私のAppDelegateの中で、私は持っています

@property (assign, readwrite) BOOL pantsButton;
@synthesize pantsButton = _pantsButton;

そのボタンがクリックされた場合、AppDelegate内のBOOL変数(pantsButton)を「YES」に設定し、ifステートメントを作成しようとしています

if ([chosenButton.pantsButton == YES]) {
    do something
 }
4

2 に答える 2

2

(changeClothes *)に割り当てるときにアプリデリゲートをにキャストしていますwhichButtonが、それはそうではありません(つまり、アプリデリゲートはのサブクラスではないと思いますchangeClothes)。

この線...

changeClothes *whichButton = (changeClothes *)[[UIApplication sharedApplication]delegate];

...つまり、アプリのデリゲートを取り、それがchangeClothesオブジェクトのふりをします。問題は、コンパイラに嘘をついているということです。:-) 後で、アプリがオブジェクトであると伝えたものを使用しようとするとchangeClothes...

if (whichButton.pantsPressedBool == YES ) {

...与えられた物が、オブジェクトが本来あるべき動作をしていないことを発見しますchangeClothes(つまり、 について何も知りませんpantsPressedBool)。

于 2012-08-28T15:13:27.950 に答える
1

AppDelegatepassColorswhichButton. あなたは AppDelegatedrawRectのプロパティを参照しています。pantsPressedBoolあなたのプロパティは、ChangeClothesViewControllerしかしで宣言されています。

drawRectあなたとpantsPressedあなたの関数の両方で正しいオブジェクトを参照する必要があります。この場合、それはあなたのChangeClothesViewControllerインスタンスでなければなりません。

于 2012-08-28T15:14:12.390 に答える