Адресная книга Префикс номера телефона (+45), вызывающий сбой!
У меня проблемы с получением телефонных номеров из адресной книги iPhone.
Нет проблем, если номер не содержит префикса кода страны, например +45, но если это так, мое приложение вылетает...
Это известная проблема? Я не смог ничего найти об этом...
Спасибо
РЕДАКТИРОВАТЬ:
Я получаю номер телефона, как это:
-(void)getContact
{
ABPeoplePickerNavigationController *pp = [[ABPeoplePickerNavigationController alloc] init];
pp.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
pp.peoplePickerDelegate = self;
[self presentModalViewController:pp animated:YES];
[pp release];
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
// assigning control back to the main controller
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
return YES;
}
-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
saveString = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,identifier);
saveString = [saveString stringByReplacingOccurrencesOfString:@" " withString:@""];
nummerTextField.text = saveString;
}
2 ответа
Решение
Как вы извлекаете объект из адресной книги, и как только он получен, как вы обрабатываете его, чтобы извлечь из него номер. Я использую приведенный ниже код, чтобы сделать то же самое, что вы упомянули, и он точно выбирает числа.
ABRecordRef person = ABAddressBookGetPersonWithRecordID(appDelegate.addressBook, contactId);
ABMultiValueRef multiValue = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSArray *allNumbers = (NSArray *)ABMultiValueCopyArrayOfAllValues(multiValue);
NSMutableDictionary *filteredNumbers = [NSMutableDictionary new];
if([allNumbers count] > 0) {
for(int contactIndex = 0; contactIndex < [allNumbers count]; contactIndex++) {
NSString *contactValue = (NSString *)ABMultiValueCopyLabelAtIndex(multiValue, contactIndex);
if(!([contactValue isEqualToString:@"_$!<WorkFAX>!$_"] || [contactValue isEqualToString:@"_$!<HomeFAX>!$_"] || [contactValue isEqualToString:@"_$!<Pager>!$_"])) {
if([[contactValue substringWithRange:contactLabelCharacterCustom] isEqualToString:@"_$"])
typeOfContact = [contactValue substringWithRange:contactLabelCharacter];
else
typeOfContact = [contactValue substringWithRange:(NSRange){0,1}];
NSString *value = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, contactIndex);
[filteredNumbers setValue:typeOfContact forKey:value];
[value release];
value = nil;
}
[contactValue release];
contactValue = nil;
}
}
Я уверен, что это поможет вам.
ура
Это решило мою проблему. Надеюсь, кто-то найдет это полезным.
ABMultiValueRef multiValue = ABRecordCopyValue(person, property);
NSString *number = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, ABMultiValueGetIndexForIdentifier(multiValue, identifier));
// Error was here: NSString *value = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, contactIndex);
//Copy the number etc before cleaning everything up
saveString = number;
saveString = [saveString stringByReplacingOccurrencesOfString:@" " withString:@""];
nummerTextField.text = saveString;
[number release];
CFRelease(multiValue);