Der folgende Code erstellt ein Array aller meiner Kontakte in meinem Adressbuch nach Vorname und Nachname. Das Problem ist, ich habe einen Kontakt, der immer mit einem leeren Vor- und Nachnamen auftaucht. Ich kann diesen Kontakt in meinem aktuellen Adressbuch nicht finden. Kann jemand vorschlagen, wie man das debuggt, um die Quelle des Geheimnisgeistkontakts herauszufinden?Leere Feld auf dem iPhone AddressBook, wie Debuggen?
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *peopleArray = (NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *allNames = [NSMutableArray array];
for (id person in peopleArray) {
NSMutableString *firstName = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) autorelease];
NSMutableString *lastName = [(NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty) autorelease];
ABMutableMultiValueRef multiValueEmail = ABRecordCopyValue(person, kABPersonEmailProperty);
if (ABMultiValueGetCount(multiValueEmail) > 0) {
NSString *email = [(NSString *)ABMultiValueCopyValueAtIndex(multiValueEmail, 0) autorelease];
}
if (![firstName length]) {
firstName = @"";
}
if (![lastName length]) lastName = @"";
[allNames addObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName]];
}
Der Personentyp ist vom Typ NSCFType. Ich könnte leicht etwas tun wie:
if (![lastName length] && ![firstName length]) continue;
.. und mit dem Problem gemacht werden. Ich bin gespannt, welcher Eintrag in meinem Adressbuch als Geist erscheint. Ich habe versucht, das Objekt mit gdb zu untersuchen, kann aber nichts Wertvolles daraus ziehen.
Ich würde gerne alle Eigenschaften für Person sehen, aber derefreaming das Objekt zu (ABPerson *) scheint es nicht zu tun.
Ich habe auch versucht mit CFShow (Person), die es als Typ CPRecord enthüllt. Hier finden Sie jedoch keine weitere Dokumentation.
Gibt es etwas in gdb, das ich tun kann, um dieses bestimmte Personenobjekt weiter zu untersuchen, um zu sehen, woher die Quelle kommt?
Sind irgendwelche dieser Eigenschaften als Rückkehr veränderbare Objekte deklariert? Ich verstehe nicht, warum Sie dort Namen von veränderbaren Objektklassen verwenden. Sind Sie auch sicher, firstName und lastName sind leer und nicht null? Sie ersetzen nil am Ende der Schleife durch leer; Haben Sie die Variablen vor oder nach dieser Substitution untersucht? –
Hallo Peter, ich ersetze sie mit leer, wenn sie Null sind, sonst bekomme ich etwas wie Joe (null) in meiner Ausgabe. Wenn es einen besseren Ansatz gibt, würde ich es gerne hören. Deshalb habe ich sie als veränderbare Objekte deklariert. Wenn es eine bessere Möglichkeit gibt, dies zu schreiben, würde ich gerne lernen. – Coocoo4Cocoa