我正在调整我一直关注的书籍课程中的程序,并且有三个类:一个视图控制器,一个视图和一个包含另一个共享变量的单例。
我正在尝试在视图控制器中编写一些代码,随后会触发视图以发送[self setNeedsDisplay]消息。但是,当我将其设置为实例方法时,编译器会抛出一个“无类”方法'例外。当我将方法改为类方法时,自我'财产不再有效。
我说实话,我仍然可以理解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
如果有人对此有任何想法和/或意见,我很乐意听到他们的声音!
答案 0 :(得分:1)
好的,所以,当你有两个字符串 - 比如@"kitten"
和@"puppy"
时 - 如果你想得到一个特定字符串的长度,你会问这个字符串的长度。例如,您可以编写[@"kitten" length]
并获得答案6
。你不会写[NSString length]
,因为你不想要NSString类的长度 - 你想要包含单词" kitten"的特定NSString的长度。 / p>
您自己的课程以同样的方式工作。就像你想知道某个特定NSString的内容时你不会与NSString类交谈一样,你不想与BNRHypnosisView类交谈以影响应用程序中显示的视图。相反,您需要向视图控制器传递对正在显示的特定BNRHypnosisView的引用。