Problème avec notification globale!

elfelf Membre
02:36 modifié dans API AppKit #1
Bonjour,

Je viens de rencontrer un drôle de bug: la console ne veut pas poster une notif au centre globale... Le log me dit 2006-08-09 10:30:36.472 AwayHelper[11765] CFLog (0): *** Attempt to post a distributed notification (SSAwayChangeStatusNotif) with a non-string object ignored.

Voilà  mon code pour la poster:
[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@&quot;SSAwayChangeStatusNotif&quot; object:[states objectAtIndex:stateIndex] userInfo:nil deliverImmediately:YES];<br />


[states objectAtIndex:stateIndex] est un objet de type SSState qui est une classe custom...

Si je comprens bien on ne peut envoyer que des strings? c'est bizzare et stupide!

Merci d'avance,
elf

Réponses

  • BruBru Membre
    02:36 modifié #2
    dans 1155112428:

    Si je comprens bien on ne peut envoyer que des strings? c'est bizzare et stupide!


    Bin, si tu lis la doc (gaussons-nous), effectivement, il est clairement dit que object ne peut être que un NSString.

    Quant à  juger sur la stupidité ou la bizarrerie...
    Les notifications sont là  pour... notifier, et non envoyer des données (complexes) entre tâche. Pour ça, il existe d'autres mécanismes plus souples/performants.

    Va voir du côté des ditributed objects : c'est puissant et simple à  mettre en oeuvre (ça permet de rendre "visible" à  d'autres tâches un objet et ses méthodes créé dans une tâche).

    .
  • elfelf Membre
    02:36 modifié #3
    yop,

    j'ai trouvé un moyen de passer outre cette limitaion...

    j'envoi une archive de mon objet dans le userinfo (j'ai du me fatiguer a implémenter NSCoding)

    - (void)postNotif<br />{<br />	NSData *stateData = [NSArchiver archivedDataWithRootObject:[states objectAtIndex:stateIndex]];<br />	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@&quot;SSAwayChangeStatusNotif&quot; object:@&quot;change&quot; userInfo:[NSDictionary dictionaryWithObject:stateData forKey:@&quot;state&quot;] deliverImmediately:YES];<br />}<br /><br />- (void)recoinotif:(NSNotification *)notification<br />{<br />	SSState *state = [NSUnarchiver unarchiveObjectWithData:[[notification userInfo] objectForKey:@&quot;state&quot;]];<br />	NSLog([state name]);<br />}<br />
    


    merci quand même,
    ça pourras m'être utile,
    elf
Connectez-vous ou Inscrivez-vous pour répondre.