Я создаю приложение, в котором мне нужно сохранить контакт в адресной книге. Все работает отлично, за исключением случаев, когда я добавляю kABPersonAddressProperty
, сначала добавляю их, затем я сохраняю адрес, и он падает при сохранении.ABAddressBookSave сбой при добавлении kABPersonAddressProperty
Ошибки я получаю:
-[__NSCFString count]: unrecognized selector sent to instance 0x99e6f30
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString count]: unrecognized selector sent to instance 0x99e6f30'
Вот код, который я использую:
ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
//
//some code here, not relevant
//
ABMutableMultiValueRef multiAdd = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiAdd, (__bridge CFStringRef)self.Street.text, kABPersonAddressStreetKey, NULL);
ABMultiValueAddValueAndLabel(multiAdd, (__bridge CFStringRef)self.ZIPcode.text, kABPersonAddressZIPKey, NULL);
ABMultiValueAddValueAndLabel(multiAdd, (__bridge CFStringRef)self.City.text, kABPersonAddressCityKey, NULL);
ABRecordSetValue(aRecord, kABPersonAddressProperty, multiAdd, &anError);
CFRelease(multiAdd);
//More irrelevant code here
ABAddressBookRef addressBook;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreateWithOptions(nil, NULL);
BOOL isAdded = ABAddressBookAddRecord (addressBook, aRecord, &error);
if(isAdded){
NSLog(@"added..");
}
if (error != NULL) {
NSLog(@"ABAddressBookAddRecord %@", error);
}
error = NULL;
BOOL isSaved = ABAddressBookSave (addressBook, &error);
Всякий раз, когда я запускаю этот код, ошибка всегда NULL, и isAdded всегда true, но все же он сбой во время выполнения ABAddressBookSave(addressBook,&error);
. Еще одна важная вещь: если я удалю эту часть кода:
ABMutableMultiValueRef multiAdd = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiAdd, (__bridge CFStringRef)self.Street.text, kABPersonAddressStreetKey, NULL);
ABMultiValueAddValueAndLabel(multiAdd, (__bridge CFStringRef)self.ZIPcode.text, kABPersonAddressZIPKey, NULL);
ABMultiValueAddValueAndLabel(multiAdd, (__bridge CFStringRef)self.City.text, kABPersonAddressCityKey, NULL);
ABRecordSetValue(aRecord, kABPersonAddressProperty, multiAdd, &anError);
CFRelease(multiAdd);
Контакт прекрасен, с именем, фамилией, несколькими телефонными номерами, URL-адресом и электронной почтой.
Ok, это вполне имеет смысл, я собираюсь дать ему попробовать. Приветствия. – Alejandro
Он отлично работает, спасибо. – Alejandro