1

正直、どう呼べばいいのかわからないので、説明してみます。

UIApplicationDelegateプロトコルには「application:handleOpenURL:」メソッドがあります。そして、このメソッドをApplicationDelegateクラスに実装すると、誰かが私のURLを開いたときに呼び出されます。

詳細: http ://developer.apple.com/iphone/library/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:handleOpenURL :

ただし、他のクラス(uiviewcontroller)にこの呼び出しを受信させたいのですが。別の例を示すために、いくつかのクラスを作成し、それぞれがGPS位置を取得できます。UIApplicationDelegateプロトコルで同じことを行うことは可能ですか?

ここでこのトピックをたくさん検索しましたが、その方法についての答えは見つかりませんでした。アプリケーションデリゲート([[UIApplication sharedApplication]デリゲート])を取得する方法は知っていますが、この状況ではそうではありません。

4

3 に答える 3

3

彼らの最初の本能はサブクラス、サブクラス、サブクラスであるため、他のオブジェクト指向言語からObjective-cに到達した人にはいつでも伝えることができます。obj-cには多くのサブクラス化はありません。もちろんできますが、特にUIApplicationDelegateのようにワンショットっぽいものでは、従来の方法ではありません。よりCocoaishの方法は、カテゴリを使用するか、場合によっては、親になる予定のクラスをプロパティとして含む新しいNSObjectサブクラスを作成することです。

この場合、確かにサブクラス化は悪い考えです。UIApplicationシングルトンは1つのデリゲートプロパティのみを持つことができます。したがって、新しいUIApplicationDelegateを作成する場合、それにフックする場所はありません。

代わりに、1つのデリゲートのapplication:handleOpenURL:メソッドをスマートにして、URL呼び出しをキャッチし、それを処理するUIViewControllerサブクラス(私が知っている、私が知っている:例外)をロードします。

于 2010-08-17T13:53:25.157 に答える
1

最も簡単な解決策は、NSNotificationを使用することです。これにより、アプリケーションデリゲートと処理するクラスの間に不要な結合を作成することなく、必要な場所でhandleOpenURL呼び出しを処理できます。

アプリデリゲートで、デリゲートメソッドを処理し、NSNotificationCenterの使用に関するデータを転送します。

- (void)application:(UIApplication *)application handleOpenURL:(NSURL *)URL
{
  [[NSNotificationCenter defaultCenter] postNotificationName:@"MyApplicationHandleOpenURLNotification" object:self userInfo:[NSDictionary dictionaryWithObject:URL forKey:@"URL"]];
}

これで、これを処理する必要がある場合は、通知のオブザーバーとして登録し、通知ユーザー情報ディクショナリからURLを引き出すだけです。

于 2010-08-17T17:45:30.990 に答える
1

Dan Rayの回答に対するコメントから判断すると、 Three20のURLベースのナビゲーションのようなものを探しているようです。

于 2010-08-17T17:49:02.397 に答える