我目前正在开发一个应用程序,如果用户点击按钮,它会将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
}
答案 0 :(得分:2)
当您分配给(changeClothes *)
时,您正在将应用委托投射到whichButton
,但这不是它的原因(也就是说,我认为您的应用委托不是changeClothes
的子类)
这一行...
changeClothes *whichButton = (changeClothes *)[[UIApplication sharedApplication]delegate];
...说,拿应用代表并假装它是changeClothes
对象。问题是你对编译器撒谎。 :-)后来,当应用程序试图使用你告诉它的东西是changeClothes
对象...
if (whichButton.pantsPressedBool == YES ) {
...它发现你给它的东西不会像changeClothes
对象那样行动(即对pantsPressedBool
一无所知)。
答案 1 :(得分:1)
您正在使用AppDelegate passColors
和whichButton
做一些奇怪的事情。在drawRect
中,您指的是AppDelegate的pantsPressedBool
属性。您的财产在ChangeClothesViewController
中声明。
您需要在drawRect
和pantsPressed
以及您的函数中引用正确的对象。在这种情况下,它应该是您的ChangeClothesViewController
实例。