我正在制作一个计算器,并且有一个称为CalculatorBrain的类,名为CalculatorFirstViewController的数学部分有两个MVC。图表部分的另一个称为GraphViewController。作品,但我不知道为什么,目标c
在CalculatorController中,我使用mutableArray作为计算器堆栈,并通过segue将它传递给图形视图控制器。 GraphView的属性称为graphingPoints。之后,通过drawrect并调用“programToGraph”方法,该方法将创建一个图形点的数组。令我困惑的是我在“programGraph”中调用了一个方法“runProgram:usingVariableValues”,虽然“runProgram”只在CalculatorBrain中声明,它是一个单独的对象文件。为什么这个方法调用工作?
@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]];
}
这里是RunProgram的声明,它是在Calculator MVC中使用的CalculatorBrain对象中声明的。它是一个类方法。它所做的只是返回在堆栈上执行操作的值。
+ (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;
}
那么怎么来的,我可以打电话runProgram虽然我没有导入CalculatorBrain文件,我没有通过SEGUE传递到另一个控制器?
你意识到你必须在m或h中导入这个东西,因为你可以访问CalculatorBrain类。或者你有一个前向引用(@class),但是然后CLANG会抱怨它。 – CodaFi 2012-07-22 22:56:07
我没有将任何CalculatorFiles导入到graphingController中,但我没有将CalculatorController导入到CalculatorControlelr中以便能够调用Segue。我以为你必须保持MVC分开 – 2012-07-22 23:21:53
你有没有什么课程? – CodaFi 2012-07-22 23:23:39