1

セグエと、それらがどのように機能し、オブジェクトを渡すかを理解するのに苦労しています。基本的に私は電卓を持っていて、配列に格納されているオブジェクトをグラフ化しようとしています。これまでのところ、CalculatorBrainのインスタンスであるbrainというオブジェクトがあります。これで、brainには変数を格納するためのスタックとして使用するNSArrayプロパティがあります。配列に値3と5を追加してから、セグエを実行したいとします。「グラフ」というボタンにセグエを選択しているので、ボタンをクリックするとセグエになります。セグエしている新しいビューコントローラーに脳を渡すにはどうすればよいですか?渡されたオブジェクトを受け入れる必要があると思う新しいViewControllerで定義されているsetGraphingPointというプロパティがあります。また、脳をセグエに通すと、値3と5が一緒に渡されますか、それともCalculatorBrainの新しいオブジェクトが作成されますか?これが私がこれまでに持っているものです。

これは、新しいViewControllerで定義されています

@property (nonatomic, strong) CalculatorBrain *graphingPoint;
@synthesize graphingPoint = _graphingPoint;

-(void) setGraphingPoint:(CalculatorBrain*) graphingPoint{

_graphingPoint = graphingPoint;
[self.graphingView setNeedsDisplay];

}

これは、セグエするボタンを持つ古いビューコントローラーから呼び出されます

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if([segue.identifier isEqualToString:@"Graph"])
    [segue.destinationViewController setGraphingPoint:[self.brain program]];
4

1 に答える 1

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];
于 2012-07-19T21:44:13.637 に答える