3

アプリケーションデリゲートの変数/プロパティをグローバルとして使用しています。(私はシングルトンクラスを扱いたくありません。)

ApplicationDelegateクラスに#defineステートメントを書き込もうとしています。私がタイプした場合:

  [UIApplication sharedApplication]

私のアプリデリゲートクラスでは、コードヒントはsharedApplicationを認識しません。しかし、viewControllerクラスに同じものを入力すると、「sharedApplication」がすぐに表示されます。

applicationDelegate.h(または.m?)でNSMutableDictionaryを定義するために、次のように記述します。

#define MyDictionary [[[UIApplication sharedApplication] delegate] stateDictionary]

次に、別のクラスで使用しようとすると、次のようになります。

[[MyDictionary objectForKey:@"California"] largestCity];

MyDictionaryを最初に宣言する必要があるというエラーが表示されます。私はここで多くの概念について本当に混乱しています。

4

2 に答える 2

8

私は誰かがこれにもっとよく答えると確信していますが、ここに簡単なものがあります:

あなたのアプリケーションがmyApplicationと呼ばれているとしましょう。「グローバル」プロパティをMyApplicationDelegateに割り当てると、次のような場所からアクセスできるようになります。

// get reference to app delegate
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]

Property *myProperty = appDelegate.property;

また、ヘッダーでMyApplicationDelegateファイルにリンクしていることを確認してください。

#import "MyApplicationDelegate.h"

「グローバル」オブジェクトを使用することが一般的に優れた設計であるかどうかについては、より長い議論がありますが、ここでは取り上げません。

于 2009-08-27T20:17:50.170 に答える
2

私はいつもUIApplicationこのようなカテゴリを追加します:

@interface UIApplication (MyAppDelegate)
+(MyAppDelegate*)sharedMyAppDelegate;
@end

このようにして、型キャストについてまったく心配する必要はありません。MyAppDelegate私はよくこのカテゴリをクラス自体と同じファイルで定義して実装します。#importだからこれは私がいたるところにあるヘッダーです。ファイルに追加できるのはすべてです。MyProject_Prefix.chp

アーキテクチャが適切に階層化されていれば、シングルトンは悪くありません(もちろん、完全にテスト可能です)

于 2009-08-28T21:15:24.140 に答える