2012-01-18 34 views
0

私はいくつかの同様のスレッドを読みましたが、これを理解できないようです - 残念です。 私は、ViewController、いくつかの "サブ"ビュー、NavigationControllerなど、複数のビューを持つプロジェクトを持っています。私はどのViewからでもアクセス可能な配列を持っていて、TableViewやTextFieldなどを取り込めるようにしたいのですが、配列にアクセスできるViewから変更できるようにしたいと思います。複数のビュー/ XIB間で変数を共有する方法

今私はxxAppDelegate.hファイルでこれを持っている:

NSMutableArray *listOfHeadings; 
@property (strong,nonatomic) NSMutableArray *listOfHeadings; 

そしてxxAppDelegate.mファイルで、私は、配列を移入:

listOfHeadings = [[NSMutableArray alloc] init]; 
[listOfHeadings addObject:@"Heading 0"]; 
[listOfHeadings addObject:@"Heading 1"]; 

しかし、私はアクセスに見えることはできません他の.mファイルからの配列 これを正しく行うにはどうすればよいですか?あなたがxxAppDelegateであなたの配列を入れているので

答えて

0

をあなたが持っている現在の設計では、あなたが使用してAppDelegateポインタのネタを得ることができます。

AppDelegate *dPtr = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

その後、プロパティを使用してアレイにアクセスすることができます

[dPtr.your_array objectAtIndex:i]; 

しかし、グローバルオブジェクトを管理するには、シングルトンデザインパターンを使用することを強くお勧めします。

+0

@ipmcc私のビュー.mファイルでこのオプションを試しましたが、 "宣言されていない識別子AppDelegateの使用" – wayneh

+0

あなたは@AJを意味すると思います。 – ipmcc

+0

@AJ。私はビュー.mファイルでこのオプションを試しましたが、宣言でエラーが発生しました: "宣言されていない識別子の使用AppDelegate"(ありがとう@ipmvcc) – wayneh

1

、あなたはこのように他のクラスから自分のアレイにアクセスすることができます

#import "xxAppDelegate.h" 
//... 
NSMutableArray *array 
= [(xxAppDelegate *)[[UIApplication sharedApplication] delegate] listOfHeadings]; 
+0

あなたのコードを試してみましたが、私の実際の名前を置き換え、いくつかのエラー(Xcode 4.2)があったので、最初に "NSApp"を "UIApplication"に変更しました。私は今、 "知られていないクラスセレクタ 'デリゲート'(UIApplicationを指している)と" Initializer要素はコンパイル時定数ではありません "(xxAppDelegateを指しています)というエラーを受け取ります。 – wayneh

+0

ああ、申し訳ありません。私はiOS上でそれが違うことを忘れていました。 (私のコードはMac用だった)。私は今私の答えを修正しました。今すぐ試してみてください。 – Enchilada

+0

まだありません - 私はインポートステートメントを持っていますが、私はまだ取得しています: "初期化要素はコンパイル時定数ではありません"(xxAppDelegateを指して) – wayneh

1

アレイのアプリケーションデリゲート/ルートコントローラのプロパティにアクセスすることは可能ですが、それはカプセル化の原則に違反します。すべてのサブビュー/コントローラクラスがアクセスする単一のプロパティを定義するのではなく、必要な各クラスに配列を渡します(メモリに1つの配列しかなく、各クラスは同じ配列にアクセスします) (例えば、インスタンス化)。

別のオプションとして、アプリケーションワイドシングルトンクラスを作成して、興味のある発信者にアレイを提供することもできます。

+0

あなたの最初の提案は、2番目の提案よりはるかに優れています。ビューコントローラにジョブを実行するために知る必要があるすべてのことを指示した場合、外部の依存関係はありません。これは、より柔軟で、再利用可能で、テスト可能で、保守性が高いことを意味します。 @ Caleb、 – Caleb

+0

が合意した。 – isaac

+0

@isaac ipmccやEnchiladaのようなものを実装しなければならないと思いますか?また、ソリューションで回答し、他の誰かがサンプルコードで回答した場合、この回答のクレジットを与えるにはどうすればよいですか? – wayneh

関連する問題