3

私はiPhoneとObjectiveCに不慣れです。私は何時間も何時間もかけて文書を読み、物事がどのように機能するかを理解しようと努めてきました。私はRTFMを持っているか、少なくともその過程にあります。

私の主な問題は、イベントが渡される場所を指定する方法を理解したいということです。それを実行できる唯一の方法は、デリゲートを指定することですが、IBにはもっと簡単で迅速な方法があると確信しています。

だから、例。20の異なるビューとビューコントローラーと1つのMyAppDelegateがあるとしましょう。これらのさまざまなXibファイルをすべてIBでビルドし、ボタンやテキストフィールドなどをいくつでも追加して、それらすべてがMyAppDelegateオブジェクトで何らかのイベントを生成するように指定できるようにしたいと思います。これを行うために、IBのリストビューの各ViewControllerにMyAppDelegateオブジェクトを追加しました。次に、XCodeのMyAppDelegateでIBActionメソッドを作成し、IBに戻って、すべてのイベントを各XibファイルのMyAppDelegateオブジェクトにリンクしました。

しかし、実行しようとすると、読み取り例外が発生してクラッシュしました。

私の推測では、各Xibファイルは、実行時に実際に作成される最終的なMyAppDelegateアドレスとは関係のないMyAppDelegateオブジェクトポインターを配置しています。

だから私の質問は...どうすればこれを行うことができますか?!!!

4

3 に答える 3

4

各nibファイルにMyAppDelegateのインスタンスを作成すると、そうです。すべてのnibが読み込まれると、クラスのさまざまなインスタンスが作成されます。アプリデリゲートは、クラスやプロトコルによっても識別されませんが、アプリケーションインスタンスのdelegateプロパティによってポイントされるオブジェクトとして識別されます。真のアプリデリゲートを見つけるには、アプリケーションオブジェクト自体にデリゲートを要求する必要があります

すべてのViewControllerは、プロパティを持つ親ViewControllerクラスの子孫である必要がありappDelegateます。次のようなものを実装します。

#import "MyAppDelegateClass.h"

@interface ViewControllerBaseClass :UIViewController {
    MyAppDelegateClass *appDelegate;
}
@property(nonatomic, retain)  *appDelegate;

@end

@implementation ViewControllerBaseClass
@synthesize appDelegate;

-(MyAppDelegateClass *) appDelegate{
    self.appDelegate=(MyAppDelegateClass *)[[UIApplication sharedInstance] delegate];
    return appDelegate;
}
@end

ビューコントローラがアプリデリゲートを必要とする場合、それは単にを呼び出しますself.appDelegate。アプリデリゲートの属性にアクセスする場合は、を使用しますself.appDelegate.attributeName

重要なことは、実行時に特定のデリゲートインスタンスをアプリケーションに要求することです。nibファイルからそれを行うことはできません。

于 2010-04-25T22:01:10.487 に答える
1

あなたが何をしようとしているのか完全にはわかりませんが、それはおそらく悪い考えです。アプリケーションごとに1つのアプリデリゲートのみが存在し、アプリケーション全体の動作を処理する必要があります。通常、アプリデリゲートはルートビューコントローラーを初期化して表示しますが、それ以外のことはほとんどありません(データソースのオープンや保存などの処理以外)。

ビューコントローラ(のサブクラスUIViewController)は、XIBと対話する必要があります。ビューコントローラでビュー固有の動作を行うと、アプリの管理と保守がはるかに簡単になります。通常、View Controllerごとに0または1のXIBが必要です(それ以上は複雑です)。IBOutletsおよびIBActionsでターゲット/アクションパターンを使用してビューとの相互作用を設定します(完全なガイドについては、ここを参照してください)。ビューコントローラまたはXIBをアプリデリゲートに依存させることは一般的に悪い考えです(依存関係を減らすとコードの管理が容易になるため)。

于 2010-04-26T01:56:04.800 に答える
0

一般に、構築するビューごとにビューコントローラーを作成し、イベントをアプリデリゲートではなくそれらのビューコントローラーにリンクする必要があります。実際、通常、nibファイルからアプリデリゲートにイベントが関連付けられることはありません。サンプルプロジェクトでも、ビューコントローラーはアプリデリゲートによって作成および保持されますが、イベントは受信されません。

于 2010-04-26T01:34:32.903 に答える