私は、私が従ってきた本のコースからプログラムを適応させており、ビューコントローラー、ビュー、および他の2つによって共有される変数を格納するシングルトンの3つのクラスがあります。
ビューコントローラー内にいくつかのコードを記述しようとしています。これにより、ビューがトリガーされ、[self setNeedsDisplay] メッセージが送信されます。ただし、これをインスタンス メソッドとして設定すると、コンパイラは「クラス メソッドなし」例外をスローします。メソッドをクラス メソッドに変更すると、'self' プロパティが機能しなくなります。
正直なところ、私はまだ OOP の一般的な違いの多くについて頭を悩ませているので、状況を完全に把握していない可能性があります。しかし、あるクラスから別のクラスにメッセージを送信して、2番目のクラスが「自己」アクションを開始するようにすることは可能ですか?
メッセージを送信する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;
}
...
メッセージを受け取るビュー クラスのコードは次のとおりです。
- (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
誰かがこれについて考えや意見を持っているなら、私はそれらを聞きたいです!