我无法理解segues以及它们如何工作和传递对象。基本上我有一个计算器,我试图绘制存储在数组中的对象。到目前为止,我有一个名为brain的对象,它是CalculatorBrain的一个实例。现在大脑有一个NSArray属性,我用它作为堆栈来存储变量。假设我将值3和5添加到数组中然后想要segue。我将我的segue选中了一个名为“Graph”的按钮,所以当我点击按钮时它会发生偏移。我如何将大脑传递给我正在酝酿的新视图控制器?我有一个名为setGraphingPoint的属性,它在新的视图控制器中定义,我认为应该接受传递的对象。另外,如果我通过segue传递大脑,那么值3和5会随之传递,还是会创建一个新的CalculatorBrain对象?这是我到目前为止所拥有的。
这是在新视图控制器中定义的
@property (nonatomic, strong) CalculatorBrain *graphingPoint;
@synthesize graphingPoint = _graphingPoint;
-(void) setGraphingPoint:(CalculatorBrain*) graphingPoint{
_graphingPoint = graphingPoint;
[self.graphingView setNeedsDisplay];
}
这是从旧的视图控制器调用的,它将具有segue按钮
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"Graph"])
[segue.destinationViewController setGraphingPoint:[self.brain program]];
答案 0 :(得分:2)
您可以使用协议。例如,您可以将prepareForSegue看起来像这样:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
id destination = segue.destinationViewController;
if([destination conformsToProtocol:@protocol(GraphPointUsing)])
[destination setGraphingPoint:[self.brain program]];
}
然后你必须确保你正在使用的ViewController符合GraphPointUsing
。
如果您不想使用协议,但仍希望在GraphPoint
上调用方法,则可以执行此操作:
//In new ViewController suppose we want to call the method `foo` on `GraphPoint`
[self.graphingPoint foo];
//Or if we want to call a setter we can do
[self.graphingPoint setFoo:5];