Frage

Um ehrlich zu sein, ich weiß nicht, wie es nennen, so dass ich es beschreiben würde es versuchen.

UIApplicationDelegate Protokoll hat "Anwendung: handleOpenURL:" -Methode. Und wenn ich diese Methode in meiner ApplicationDelegate Klasse implementieren, wird es aufgerufen werden, wenn jemand meine Urls öffnet.

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

Allerdings möchte ich meine anderen Klasse (Uiviewcontroller) diesen Aufruf zu empfangen. Um ein anderes Beispiel zu machen - Sie können ein paar Klassen erstellen, und jeder von ihnen kann die GPS-Position bekommen. Ist es möglich, das gleiche mit UIApplicationDelegate Protokoll zu tun?

suchte ich eine Menge für dieses Thema hier, aber ich konnte keine Antwort finden, wie man es tun. Ich weiß, wie meine Anwendung delegieren erhalten ([[UIApplication shared] Delegierten]), aber es ist nicht der Fall in dieser Situation.

War es hilfreich?

Lösung

Sie können immer jemanden sagen, wer von einer anderen objektorientierten Sprache Objective-C kam, weil ihr erster Instinkt zu Unterklasse ist, Unterklasse, Unterklasse. Es gibt nicht viele Subklassen in obj-c. Sie können, natürlich, aber es ist nicht, wie die Dinge in herkömmlicher Weise durchgeführt werden, vor allem mit Dingen, die als One-Shot-ish als UIApplicationDelegate sind. Je mehr Cocoaish Way ist Kategorien zu verwenden, oder manchmal eine neue NSObject Unterklasse zu erstellen, die die übergeordneten Klasse als Eigenschaft Möchtegern-enthält.

In diesem Fall sicher Subklassifizieren ist eine schlechte Idee. die UIApplication Singleton kann nur einen Delegierten Eigenschaft. Also, wenn Sie einen neuen UIApplicationDelegate erstellen, haben Sie keinen Platz bekommen, um es zu haken.

Stattdessen smarten Ihr ein Delegierten application:handleOpenURL: Methode der URL-Aufruf zu fangen und laden je nachdem, welche UIViewController Unterklasse (ich weiß, ich weiß: Ausnahmen). Geht es zu behandeln

Andere Tipps

Die einfachste Lösung wäre eine NSNotification zu verwenden. Dies ermöglicht Ihnen, den handleOpenURL Anruf zu bearbeiten, wo immer Sie brauchen, ohne unnötige Kopplung zwischen der Anwendung Delegaten zu erstellen und der Klasse, die Sie wollen, dass es zu behandeln.

In AppDelegate, behandeln die delegierte Methode und leitet die Daten über die Verwendung NSNotificationCenter.

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

Jetzt, wo auch immer Sie diese brauchen zu handhaben, registrieren Sie sich einfach als Beobachter für die Benachrichtigung und ziehen Sie die URL aus der Benachrichtigung Benutzerinfo Wörterbuch.

nach zu urteilen Ihre Kommentare zu Dan Ray Antwort, es klingt wie Sie etwas suchen, wie Three20 URL-basierte Navigation

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top