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. 在您drawRect中,您指pantsPressedBool的是 AppDelegate 的属性。但是,您的财产是在声明中声明的ChangeClothesViewController

您需要在您的drawRect和您的pantsPressed以及您的函数中引用正确的对象。在这种情况下,它应该是您的ChangeClothesViewController实例。

于 2012-08-28T15:14:12.390 回答