我正在从我一直在学习的一本书课程中改编一个程序,它有三个类:一个视图控制器、一个视图和一个包含其他两个共享变量的单例。
我正在尝试在视图控制器中编写一些代码,这些代码随后将触发视图发送 [self setNeedsDisplay] 消息。但是,当我将其设置为实例方法时,编译器会抛出“无类方法”异常。当我将方法更改为类方法时,“self”属性不再起作用。
老实说,总的来说,我仍然对 OOP 的许多区别有所了解,因此我可能无法完全掌握情况。但我想知道,是否可以从一个班级向另一个班级发送一条消息,触发第二个班级发起“自我”行动?
这是视图控制器中将发送消息的代码(使用我当前的编码尝试):
- (IBAction)indexChanged:(UISegmentedControl *)sender
{
switch (sender.selectedSegmentIndex)
{
case 0:
{
UIColor *selectedColor = [UIColor colorWithRed:1.0
green:0.0
blue:0.0
alpha:1.0];
NSLog(@"Red button pressed");
[BNRHypnosisView setCircleColor:selectedColor];
break;
}
...
这是视图类中将接收消息的代码:
- (void)setCircleColor:(UIColor *)circleColor
{
[[CDFSingleton colorPicker] changeCircleColor:circleColor];
[self setNeedsDisplay];
}
不确定它有多相关,但这是我的单例类:
@implementation CDFSingleton
+ (CDFSingleton *) colorPicker
{
static CDFSingleton *colorPicker = nil;
if (!colorPicker) {
colorPicker = [[super allocWithZone:nil] init];
}
return colorPicker;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
return [self colorPicker];
}
- (id)init
{
self = [super init];
if (self) {
//In this case, set the default circleColor to light gray
_circleColor = [UIColor lightGrayColor];
NSLog(@"Initial colour set to light gray (%@)", _circleColor);
}
return self;
}
- (void)changeCircleColor:(UIColor *)color
{
_circleColor = color;
NSLog(@"Circle colour changed to %@", color);
NSLog(@"_circleColor currently set to %@", _circleColor);
}
@end
如果有人对此有任何想法和/或意见,我很想听听他们的意见!