IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apple Discussion :

[Cocoa] ABPeoplePickerView et ABAddressBook


Sujet :

Apple

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 0
    Points
    0
    Par défaut [Cocoa] ABPeoplePickerView et ABAddressBook
    Bonsoir !

    Je poste ici car apparemment - à ma grande surprise - il ne semble pas y avoir de forums dédiés au développement Mac, en particulier sous Cocoa

    Je suis en train de prototyper quelques fonctionnalités en vue de développer une appli dans laquelle je serai en particulier amené à interagir avec le carnet d'adresses du Mac.

    J'ai donc ajouté un ABPeoplePickerView dans ma fenêtre et je capture les drags effectué depuis cette vue sur ma feuille. L'objectif est de construire des ABPerson* et ABGroup* en fonction des contacts/groupes dropés sur la fenêtre, j'ai donc développé le code suivant pour gérer le drop (c'est du test...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
    	
    	NSPasteboard *pboard = [sender draggingPasteboard];
    	
    	if ([[pboard types] containsObject:@"ABTableRowsPboardType"]) {
    		NSArray *peoplesIds = [pboard propertyListForType:@"ABTableRowsPboardType"];
    		for (NSString *peopleId in peoplesIds) {
    			// create and display each person from address book
    			ABRecord *record = [[ABAddressBook sharedAddressBook] recordForUniqueId:peopleId];
    			if ([record isKindOfClass:[ABPerson class]]) {
    				NSLog(@"Dropped person named: %@ %@", [record valueForProperty:@"firstName"], [record valueForProperty:@"lastName"]);
    			} else if ([record isKindOfClass:[ABGroup class]]) {
    				ABGroup *group = record;
    				NSLog(@"Dropped group with %d persons in it", [[group members] count]);
    			}
    		}
    	}
    	
    	return YES;
    }
    Mon code crash à la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ABRecord *record = [[ABAddressBook sharedAddressBook] recordForUniqueId:peopleId];
    Avec l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2009-07-01 20:42:59.144 Meemin[62467:813] *** -[NSCFNumber length]: unrecognized selector sent to instance 0x80001a380
    Sans trop que je ne sache pourquoi... Pour info, la variable peopleId est correcte, voici ce que j'ai dans le debugger la concernant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (gdb) po peopleId
    6
    Current language:  auto; currently objective-c
    Avec-vous déjà réussi à implémenter avec succès une telle approche ?

    Merci d'avance pour toute aide que vous pourrez m'apporter !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    votre peopleId est un NSNumber mais recordClassFromUniqueId attend un paramètre NSString

  3. #3
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    votre peopleId est un NSNumber mais recordClassFromUniqueId attend un paramètre NSString
    Je suis un débutant complet en Obj-C mais je peux au moins voir ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		for (NSString *peopleId in peoplesIds) {
    			// create and display each person from address book
    			ABRecord *record = [[ABAddressBook sharedAddressBook] recordForUniqueId:peopleId];
    			...
    		}
    P.S. "People" est un nom qui est toujours au pluriel en anglais et qui ne prend pas de "s" à la fin (comme data). Personnellement, j'aime bien appeler mes collections "allTheXxx" dans ces cas lexicales là .

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    Quand on a un problème, on analyse d'abord le message d'erreur :

    2009-07-01 20:42:59.144 Meemin[62467:813] *** -[NSCFNumber length]: unrecognized selector sent to instance 0x80001a380

    donc peoplesIds est une collection de NSNumber pas de NSString.

    essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (id peopleId in peoplesIds) {
        ABRecord *record = [[ABAddressBook sharedAddressBook] recordForUniqueId:[NSString stringWithFormat:"%@", peopleId]];
    …
    }

  5. #5
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    Compris, Obj-C accepte sans avertissements les transtypages de/à partir de (nil) et c'est précisément ce que fait la fast enumeration.

Discussions similaires

  1. Cocoa sur Linux ou Windows
    Par Tux1 dans le forum Apple
    Réponses: 24
    Dernier message: 10/04/2010, 18h57
  2. Tour d’horizon d'Objective-C/Cocoa avec SAM
    Par Mala dans le forum Contribuez
    Réponses: 3
    Dernier message: 05/02/2008, 21h33
  3. [Objectice-c][Cocoa] formatage-textField
    Par guyzmot dans le forum Apple
    Réponses: 10
    Dernier message: 02/05/2007, 16h50
  4. [Cocoa] [WebKit] Chargement d'une page Web
    Par Ceylo dans le forum Développement OS X
    Réponses: 11
    Dernier message: 12/04/2007, 19h33
  5. Cocoa/ObjectiveC versus Qt/C++
    Par epsilon68 dans le forum C++
    Réponses: 24
    Dernier message: 07/12/2006, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo