Comment faire pour envoyer une notification à l'aide de paramètres Objective-C?
J'ai besoin d'envoyer la notification @"willAnimateRotationToInterfaceOrientation"
avec les paramètres toInterfaceOrientation
et duration
(question #1) à tous les UIViewController
sur l'application (question #2). Comment écrire du code pour cela?
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(willAnimateRotationToInterfaceOrientation:toInterfaceOrientation:duration)
name:@"willAnimateRotationToInterfaceOrientation"
object:nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"willAnimateRotationToInterfaceOrientation"
object:self];
- Question connexe: stackoverflow.com/questions/15957077/...
Vous devez vous connecter pour publier un commentaire.
Utilisation
postNotificationName:object:userInfo:
et le faisceau n'importe quel paramètre que vous souhaitez passer à l'intérieur de lauserInfo
dictionnaire.Exemple:
Vous pouvez envoyer une notification comme ce
Et ensuite récupérer les informations que vous avez passé, en faisant:
Pour résumer ce que vu ci-dessus, le sélecteur utilisé pour traiter une notification prend un paramètre optionnel de type
NSNotification
et vous pouvez stocker toutes les informations que vous souhaitez passer à l'intérieur de lauserInfo
dictionnaire.toOrientation
entre parenthèses. Fixe.Cela ne fonctionne pas de la manière que vous pensez que cela fonctionne. Un message de notification d'appel en a un paramètre facultatif, qui est un
NSNotification
objet:La notification de l'objet a une propriété,
userInfo
, qui est un dictionnaire qui peut être utilisé pour transmettre de l'information pertinente. Mais vous ne pouvez pas vous inscrire arbitraire sélecteurs d'être appelé par le centre de notification. Vous passez le dictionnaire avec la notification en utilisant-postNotificationName:object:userInfo:
au lieu de-postNotificationName:object:
; lauserInfo
paramètre est juste unNSDictionary
que vous créez.UIViewController
s de l'application?UIDeviceOrientationDidChangeNotification
qui est disponible si vous le demandez en appelant[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]
(mais vous devez toujours enregistrer chaque vue-contrôleur pour elle).UIDeviceOrientationDidChangeNotification
est l'appel après une rotation pas à l'intérieur de la rotation deswillAnimateRotationToInterfaceOrientation
. Désolé pour l'éventuelle question de noob, mais nous faisons appelpostNotificationName
avecobject:self
paramètre il sera envoyé uniquement àself
objet?object
paramètre quand ils ont appeléNSNotificationCenter -addObserver:selector:name:object:
.object:nil
suraddObserver:selector:name:object:
et surpostNotificationName:object:
à la fois pour envoyer la notification à tous les abonnés?nil
dansaddObserver:::
; vous pourrez ensuite obtenir toutes les notifications, même sipostNotificationName:object:
a un non-nil
valeur pourobject
.UIInterfaceOrientation toInterfaceOrientation
etNSTimeInterval duration
paramètres de la notification?NSNumber
s, parce queNSDictionary
ne peut contenir que des valeurs de l'objet.Vous rendre plus facilement à l'appel de la méthode, qui prend moins d'arguments et le complexe d'appel pour vous.
Vous ne devriez pas appeler
willAnimateRotationToInterfaceOrientation:
tout de même. Au lieu de faire une méthode qui est appelée forme que la méthode qui contient le code que vous voulez activer la rotation, et aussi d'autres moments.userInfo
?