gpt4 book ai didi

ios - 您可以从一个类发送消息以触发另一个类中的 'self' 吗?

转载 作者:行者123 更新时间:2023-11-29 03:07:06 28 4
gpt4 key购买 nike

我正在改编我一直在关注的书籍类(class)中的一个程序,该程序具有三个类: View Controller 、 View 和包含由其他两个共享的变量的单例。

我正在尝试在 View Controller 中编写一些代码,这些代码将随后触发 View 发送 [self setNeedsDisplay] 消息。但是,当我将其设置为实例方法时,编译器会抛出“无类方法”异常。当我将方法更改为类方法时,“self”属性不再有效。

老实说,我仍然对 OOP 的许多区别有一定的了解,所以我可能没有完全掌握情况。但我想知道,是否可以从一个类向另一个类发送一条消息,触发第二个类启动“ self ”操作?

这是发送消息的 View Controller 中的代码(使用我当前的编码尝试):

- (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;
}
...

这是接收消息的 View 类中的代码:

- (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

如果有人对此有任何想法和/或意见,我很乐意听取他们的意见!

最佳答案

好的,所以,当你有两个字符串时——比如说,@"kitten"@"puppy"——如果你想获得特定字符串的长度,您会询问该字符串的长度。例如,您可以编写 [@"kitten"length] 并得到答案 6。你不会写 [NSString length],因为你不需要 NSString 类的长度——你需要包含单词“kitten”的特定 NSString 的长度。

您自己的类(class)的工作方式相同。就像当您想了解有关特定 NSString 的某些信息时您不会与 NSString 类交谈一样,您也不想与 BNRHypnosisView 类交谈以影响应用程序中显示的 View 。相反,您需要将对正在显示的特定 BNRHypnosisView 的引用传递给 View Controller 。

关于ios - 您可以从一个类发送消息以触发另一个类中的 'self' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22646497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com