Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

AddressBook framework et kABLastNameFirst

2 réponses
Avatar
unbewusst.sein
je suis un exemple de RubyCocoa "ABPresence" car j'ai besoin du
framework AddressBook.

il y a un moyen de retrouver l'ordre de tri des noms ( prénom ou nom en
premier).

si je commute ça dans mon Carnet d'adresse ( l'UI suit bien...) je ne
retrouve pas ça au niveau Cocoa ???

le bout de code associé (fourni en exemple de RubyCocoa) :

flagsValue = valueForProperty(KABPersonFlags)

flags = flagsValue ? flagsValue.intValue : 0

lastNameFirst = (flags & KABNameOrderingMask) == KABLastNameFirst

"lastNameFirst" est tjs à false...

si de manière similaire je construis une var "firstNameFirst" elle est
-- elle aussi -- tjs à false ???

qq'1 a rencontré ce pb ?

--
Une Bévue

2 réponses

Avatar
luc
Une Bévue wrote:

si je commute ça dans mon Carnet d'adresse ( l'UI suit bien...) je ne
retrouve pas ça au niveau Cocoa ???


Et tu fais la commutation avec quoi ? Il faut bien faire la distinction
entre le "name ordering" *global* qui est défini dans le panneau de
préférence du carnet d'adresses et le "name ordering" *local*,
spécifique à chaque entrée et qui peut être modifié depuis le menu
"Card".

Le bout de code que tu as montré n'utilise que le "name ordering" local
à chaque ABPerson. Le "name ordering" global est accessible depuis
l'ABAddressBook global, comme ça:

int ordering = [[[ABAddressBook sharedAddressBook] defaultNameOrdering];

--
Luc Heinrich

Avatar
unbewusst.sein
Luc Heinrich wrote:

Et tu fais la commutation avec quoi ? Il faut bien faire la distinction
entre le "name ordering" *global* qui est défini dans le panneau de
préférence du carnet d'adresses et le "name ordering" *local*,
spécifique à chaque entrée et qui peut être modifié depuis le menu
"Card".


OK, merci bien, je ne commutais qu'au niveau préférences générales...

Le bout de code que tu as montré n'utilise que le "name ordering" local
à chaque ABPerson.


Il doit y avoir une erreur dans mon code (non, voir + bas) car j'obtiens
"false" pour chaque personne et aussi bien pour lastname_first? que pour
firstname_first? ...

en pratique, depuis RubyCocoa, j'étends la classe ABPerson :

OSX.ns_import :ABPerson

class ABPerson

[...]

def flags_value
fv = valueForProperty( KABPersonFlags )
return ( fv ? fv.intValue : 0 )
end

[...]

def lastname_first?
return ( ( flags_value & KABNameOrderingMask ) == KABLastNameFirst )
end

[...]

def firstname_first?
return ( ( flags_value & KABNameOrderingMask ) == KABFirstNameFirst
)
end

[...]
end

(le but de la manip étant de transformer tout ou partie de la bd
AddressBook au format xbel : XML-vCard)


Bon, je viens juste de faire un essai de swith au niveau d'une seule
card, là je trouve :

person.flags_value = 16
person.lastname_first? = true
person.firstname_first? = false

après switch du "name ordering" pour cette même personne :

person.flags_value = 32
person.lastname_first? = false
person.firstname_first? = true

pour cette personne, c'est OK

MAIS :

pour les autres personnes :
person.flags_value = 0
person.lastname_first? = false
person.firstname_first? = false


pour les sociétés :
person.flags_value = 1
person.lastname_first? = false
person.firstname_first? = false


donc, peut-être que le pb d'avoir simultanément #lastname_first? et
#firstname_first? à false provient du fait que je n'ai jamais (mis à
part l'essai précédent) switché le "name ordering" pour une personne ???

donc ce n'est pas enregistré dans la bd ???

Le "name ordering" global est accessible depuis
l'ABAddressBook global, comme ça:

int ordering = [[[ABAddressBook sharedAddressBook] defaultNameOrdering];


OK, limipide, ça me donne :

puts (ABAddressBook.sharedAddressBook.defaultNameOrdering = KABFirstNameFirst)
# => true
puts (ABAddressBook.sharedAddressBook.defaultNameOrdering = KABLastNameFirst)
# => false

impec, deux valeurs différentes !

en résumé si #lastname_first? et #firstname_first? sont tous les deux à
false, pour une personne , ça veut dire que le name ordering est celui
par défaut ce que je viens de vérifier sur la seule personne switchée
qui me donne maintenant, après avoir sélectionné "Fiche > Rétablir
prénom / nom de famille par défaut" :

person.flags_value = 0
person.lastname_first? = false
person.firstname_first? = false


bon, en tk merci beaucoup pour m'avoir éclairé sur le sujet...

c'est assez cornecultesque AddressBook, amha, par ex, je n'ai pas pigé
l'intérêt d'avoir des handlers différents pour les IM MSN, Jabber Yahoo
and co...

--
Une Bévue