私は電卓を作成しており、CalculatorBrain と呼ばれるクラスを持つ CalculatorFirstViewController と呼ばれる数学部分用の 2 つの MVC があります。GraphViewController と呼ばれるグラフ部分のもう 1 つ。
CalculatorController では、mutableArray を電卓スタックとして使用し、それをセグエ経由でグラフ ビュー コントローラに渡します。GraphView のプロパティは、graphingPoints と呼ばれます。その後 drawrect を通過し、グラフ化する点の配列を作成する "programToGraph" メソッドを呼び出します。私を混乱させるのは、「runProgram」は別のオブジェクトファイルであるCalculatorBrainでのみ宣言されているにもかかわらず、「programGraph」内で「runProgram:usingVariableValues」メソッドを呼び出すことです。このメソッド呼び出しが機能するのはなぜですか?
@interface CalculatorFirstViewController ()
@property (nonatomic, strong) CalculatorBrain *brain;
@end
@implementation CalculatorFirstViewController
@synthesize brain = _brain;
- (CalculatorBrain*) brain{
if(!_brain) _brain = [[CalculatorBrain alloc] init];
return _brain;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"Graph"])
//The call [self.brain program] returns the CalculatorStack
[segue.destinationViewController setGraphingPoint:[self.brain program]];
}
これは、Calculator MVC で使用される CalculatorBrain オブジェクトで宣言されている RunProgram の宣言です。クラスメソッドです。スタックで操作を実行した値を返すだけです。
+ (double)runProgram:(id)program usingVariableValues:(NSDictionary*)variableValues;
これはgraphViewControllerコードです。
-(void) setGraphingPoint:(NSMutableArray*) graphingPoint{
if(_graphingPoint == nil) _graphingPoint = [[NSMutableArray alloc] init ];
_graphingPoint = graphingPoint;
//this will call drawrect
[self.graphingView setNeedsDisplay];
}
-(id) programToGraph:(GraphingView *)sender{
CGPoint graphPoint;
NSMutableArray *pointValues = [[NSMutableArray alloc] init];
for( int x =0;x<5; x++)
{
NSDictionary* xValue = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:x] forKey:@"X"];
graphPoint.x =x;
//This is the main part I dont get, If calculatorBrain is a seperate object file
//and I didn't import it, how am I able to call the method by just saying
//CalculatorBrain as the receiver?
graphPoint.y = [CalculatorBrain runProgram: self.graphingPoint usingVariableValues:xValue];
[pointValues addObject:[NSValue valueWithCGPoint:graphPoint]];
}
return pointValues;
}
では、CalculatorBrain ファイルをインポートせず、セグエ経由で他のコントローラーに渡さなかったのに、どうして runProgram を呼び出すことができるのでしょうか?