App crasht bij gebruik AdressBook framework
jimeh op 28 april 2011 #
Hey, ik ben bezig met een app voor iOs en op een bepaald moment moeten gebruikers email adressen invoeren van hun contacten dit werkt tot nu toe prima totdat je iemand selecteert die geen email-adres heeft dan crasht de app, ik heb al wat rond gezocht maar ik word niet wijs uit de apple documentatie en online was verder niets te vinden.
Weet iemand hier misschien een oplossing voor? (de console geeft verder ook geen meldingen)
-(IBAction)chooseContacts {
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
// showing the picker
[self presentModalViewController:picker animated:YES];
// releasing
[picker release];
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)chooseContacts {
// assigning control back to the main controller
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
if (ABRecordCopyValue(person, kABPersonEmailProperty)) {
NSLog(@"Geen Error%@", ABMultiValueCopyValueAtIndex(ABRecordCopyValue(person,kABPersonEmailProperty) ,0));
if([receivers.text length] != 0){
receivers.text = [receivers.text stringByAppendingString:@", "];
}
receivers.text = [receivers.text stringByAppendingString:ABMultiValueCopyValueAtIndex(ABRecordCopyValue(person,kABPersonEmailProperty) ,0)];
} else {
NSLog(@"Error");
}
[self dismissModalViewControllerAnimated:YES];
return NO;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{
return NO;
}
alvast bedankt!
Koetjesreep op 28 april 2011 #
Tjah, we kunnen gaan gokken, maar hoe staat alles gedeclareerd, verwacht hij ook daadwerkelijk een email adres en als er geen is staat hij dan op "" of Nill of hoe word dat precies afgehandeld? Want als hij wel iets verwacht, maar hij krijgt het niet mee (de ontvanger wil een email, maar de verzender geeft null) dan crasht hij.
bitsflew op 28 april 2011 #
Wijzig de volgende regel:
if (ABRecordCopyValue(person, kABPersonEmailProperty)) {
naar:
ABMultiValueRef value = ABRecordCopyValue(person, kABPersonEmailProperty);
if (value && ABMultiValueGetCount(value) > 0) {
jimeh op 28 april 2011 #
@bitsflew
Super bedankt!
er gaat nu nog 1 dingetjes fout op deze regel
receivers.text = [receivers.text stringByAppendingString:ABMultiValueCopyValueAtIndex(ABRecordCopyValue(person,kABPersonEmailProperty) ,0)];
daar krijg ik de melding: Passing argument 1 of 'stringByAppendingString:' discards qualifiers from pointer target type
weet je hier misschien ook een oplossing voor?
Willemien op 28 april 2011 #
In de Mac-versie van de documentatie staat bij Return Value steeds "You are responsible for releasing this object.". Als dit onder iOS ook zo is (er zit Copy in de naam) dan lekt je programma een beetje.
Wat geeft ABMultiValueCopyValueAtIndex terug? Kan je dit niet simpelweg casten naar een NSString*?
lord anubis op 28 april 2011 #
Je beseft dat @bitsflew laat zien dat het een multi value is.
Je moet dus door de lijst heen lopen en iedere value testen.
zoiets als
NSString *email;
ABMultiValueRef value = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty);
if (value && ABMultiValueGetCount(value) > 0) {
for (CFIndex i = 0; i < ABMultiValueGetCount(value); i++) {
emai = (NSString *)ABMultiValueCopyValueAtIndex(value, i);
NSLog([NSString stringWithFormat:@"Email: %@", email]);
// test of er rare tekens inzitten voordat je het gebruikt
if (! [email isEqualToString:@""] ) { // create your test here
if([receivers.text length] != 0){
receivers.text = [receivers.text stringByAppendingString:@", "];
}
receivers.text = [receivers.text stringByAppendingString:email];
} // end if
}
}
[email release];
Willemien op 28 april 2011 #
Als ik in adresboek een e-mailadres leeg laat dan verdwijnt het. Ik dacht dat jimeh per persoon alleen het eerste adres wilde hebben.
p.s. [email release] moet binnen de loop anders komen er crashes en leaks. (ja, ik ben een muggenzifter)
lord anubis op 28 april 2011 #
Willemien - op 28 april 2011Als ik in adresboek een e-mailadres leeg laat dan verdwijnt het.
Muggeziften? Dan zou jij zeker daar niet blindelings op vertrouwen
, altijd testen! Het gaat er om dat hij het email adres test op geldigheid, misschien zelfs op een pattern of provider. Niet alles hoeft voor gekauwd te worden.
Willemien op 29 april 2011 #
Dat muggenziften sloeg op [email release].
Wat jimeh test en gebruikt mag hij zelf weten en maken, we weten niet wat er verder mee gebeurt. Het nadeel van testen is dat er een foutje in kan zitten of dat niet alle situaties zijn voorzien en er ten onrechte wordt afgekeurd. Dat vinden gebruikers vervelender dan dat hun eigen typefouten worden overgenomen.
defores op 05 juni 2011 #
Heb je wel het adressenboek framework toegevoegd aan het project? (dus niet alleen het object).
Advertentie
Je kunt alleen reageren met een gratis OMT account.
Log in of registreer.
Inloggen
Over dit topic
Gestart op 28 april 2011 door jimeh
Laatste reactie door defores
Reageer op dit topic