2010-12-02 14 views
1

Peut-être que quelqu'un peut répondre à celui-ci facilement. Je travaillais sur une application iphone où obtenir des informations pour chaque ligne de cellForRowAtIndexPath Je créais un nouveau carnet d'adresses à chaque fois appelant:Comment corriger une variable d'instance de carnet d'adresses?

ABAddressBookRef addressBook = ABAddressBookCreate();

Cela fonctionne bien, sauf qu'il est lent et ne semble pas correct de créer un nouvel ab pour chaque ligne. J'ai donc créé une variable d'instance addressBook mais je n'arrive pas à l'utiliser sans crash. (Signal reçu du programme: "EXC_BAD_ACCESS".) J'imagine que je ne l'ai pas configuré correctement, mais que je n'ai pas eu de chance de trouver quoi que ce soit spécifiquement dans la documentation.

Merci mille fois d'avance à tous ceux qui peuvent aider.

Dans mon fichier .H Je l'ai fait:

ABAddressBookRef addressBook; 


@property(nonatomic, readwrite) ABAddressBookRef addressBook; 

Puis dans mon fichier .m:

-(id)initWithStyle:(UITableViewStyle)style 
{ 
    if (self = [super initWithStyle:style]) { 

     addressBook = ABAddressBookCreate(); 
    } 

    return self; 
} 
+0

Pourquoi créez-vous un 'ABAddressBookRef' pour chaque ligne? Ils pointent tous vers le même carnet d'adresses système partagé. Il peut être plus logique d'en utiliser une qui est utilisée par toutes les lignes. –

Répondre

0

Lorsque la libération-vous le ADDRESSBOOK par CFRelease (ADDRESSBOOK)? Si la mémoire ne suffit pas, ABAddressBookCreate() retournera un objet nul. L'API addressBook.framework basée sur C ne peut pas fonctionner avec un objet nil et elle va planter avec "EXC_BAD_ACCESS".

+0

Merci pour votre réponse rapide. Im libérant dans la méthode dealloc comme ceci: - (void) dealloc { \t CFRelease (addressBook);} Note: il s'est écrasé même lorsque le carnet d'adresses contient seulement 2 ou 3 enregistrements. –

+0

Je pense qu'il y a des erreurs logiques dans d'autres endroits. L'information est trop petite pour identifier pourquoi vous plantez. – AechoLiu

+0

Oui merci. Ce doit être une cause secondaire, mais ce que je voulais vraiment savoir, c'est si le code ci-dessus est la bonne façon de configurer un ivar addressBook? Parce que quand je crée l'AB directement dans cellForRowAtIndexPath et ne change rien d'autre cela fonctionne. L'idée était de tester les performances dans les deux sens, mais ... –