フィローズ・ラフェアの答えは正しいですが、この問題はおそらくあなたのコードのデザインが悪いという症状です。
あなたのアプリケーションでは、JBXViewControllerが親ビューコントローラであり、特定の機能に対してViewController2が表示されることがあります。 (たとえば、JBXViewControllerはレコードのリストを表示し、ViewController2はレコードの1つを編集します)。このような状況では、ViewController2はJBXViewControllerの詳細を知るべきではありません。代わりに、JBXViewControllerは、ViewController2のプロパティを介して必要なデータをViewController2に渡し、ViewController2がJBXViewControllerのメソッドを呼び出す必要がある場合、それらはデリゲートプロトコルの一部でなければなりません。例えば
、JBXViewControllerは現在、次のプロパティがあり、ViewController2がそれにアクセスしたとします
@property (strong) JBXObject * currentObject;
あなたが代わりにViewController2上のCurrentObjectプロパティを持つ必要があり、かつJBXViewControllerは、ビューコントローラを表示する前にそれを設定する必要があります。
を
self.myViewController2.currentObject = self.currentObject;
[self.navigationController pushViewController:self.myViewController2 animated:YES];
これは一方向の通信で動作します.JBXViewControllerはViewController2データを送信できます。データをJBXViewController(currentObjectのプロパティを変更する以外)に戻す必要がある場合は、ViewController2のデリゲートを設定する必要があります。たとえば:そうのようなInterface Builderでまたはコードのいずれかで、
@interface JBXViewController : UIViewController <ViewController2Delegate>
デリゲートを設定します:
@protocol ViewController2Delegate; // forward declaration
@interface ViewController2 : UIViewController
@property (weak) id <ViewController2Delegate> delegate;
...
@end
@protocol ViewController2Delegate <NSObject>
- (void)viewController2ShouldSave:(ViewController2*)viewController2;
- (BOOL)viewController2:(ViewController2*)viewController2 shouldAddSomoflange:(JBXSomoflange*)aSomoflange;
@end
はその後JBXViewControllerは、プロトコルに準拠している
self.myViewController2.delegate = self;
self.myViewController2.currentObject = self.currentObject;
[self.navigationController pushViewController:self.myViewController2 animated:YES];
をし、実装のすべてViewController2Delegateにリストされているメソッド。
ViewController2がJBXViewControllerがどのように動作するかの具体的な知識を必要としない:
は一緒に、これらの変化は、3つのことを意味します。これは、ViewController2でJBXViewController.hをインポートする必要がなくなったことを意味します。あなたの直面する問題を解決します。
JBXViewControllerがより柔軟になりました。 ViewController2で適切なプロパティを設定し、必要なデリゲートメソッドを実装している限り、JBXViewControllerおよびViewController2で必要なものを変更することはできません。
ViewController2もより柔軟になりました。あなたは、アプリケーションの他の部分からそれを使用したり、別のアプリケーションに移動することができます。 JBXViewControllerとViewController2の間に画面を挿入できます。
これらの変更は、アプリをあなたのデバイスで実行して、意図したとおりに機能させるためには必要ありません。しかし、あなたがこれらのデザインを採用し始めるならば、道のりを簡単にすることができます。
また、JBXViewController.hでViewController2.hをインポートしていますか? –
"JBXViewController.h"にsmの問題がある必要があります。クラスJBXViewControllerからいくつかの初期コードを投稿できますか? – samfisher
@FirozeLafeerます。#import "ViewController2.h" @interface JBXViewController::私はここにJBXViewController.h – Rob