immagine Libro Impostazione indirizzo per un contatto non sembra funzionare
-
21-09-2019 - |
Domanda
Sto cercando di impostare l'immagine contatto con il codice qui sotto. Io non sto vedendo eventuali errori, e l'immagine non viene salvata la voce del contatto nella rubrica. Per favore aiuto! Devo fare qualcosa di sbagliato ...
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
[abcontroller setDisplayedPerson:person];
UIImage *im = [UIImage imageNamed:@"image1.jpg"];
NSData *dataRef = UIImagePNGRepresentation(im);
CFErrorRef error;
ABAddressBookRef addressBook = ABAddressBookCreate();
NSLog(@"Error:",error);
if (ABPersonSetImageData(person, (CFDataRef)dataRef, &error))
{
NSLog(@"Set contact photo %@", error);
if (ABAddressBookHasUnsavedChanges(addressBook))
{
NSLog(@"Changes made to address book");
}
else {
NSLog(@"No changes made to address book");
}
if (ABAddressBookSave(addressBook, &error))
{
NSLog(@"Saved");
}
else {
NSLog(@"Not saved");
}
}
else {
NSLog(@"Error saving contact photo %@", error);
}
ABAddressBookSave(addressBook, &error);
[self dismissModalViewControllerAnimated:YES];
return NO;
}
Ecco il mio registro di output:
2010-01-17 21:58:35.465 Error:
2010-01-17 21:58:35.504 Set contact photo <ABPeoplePickerNavigationController: 0x19e9b0>
2010-01-17 21:58:43.497 No changes made to address book
2010-01-17 21:58:44.724 Saved
Non sono sicuro che il motivo per cui l'oggetto errore sta registrando come un oggetto ABPeoplePickerNavigationController?
Soluzione
Per quanto riguarda la Non so perché l'oggetto errore sta registrando come un oggetto ABPeoplePickerNavigationController - perché non stai inizializzazione correttamente il error
qui:?
CFErrorRef error;
Assegnare nil
, oppure avrà un valore casuale (o, più precisamente, una certa memoria precedente), incidentalmente indica un oggetto ABPeoplePickerNavigationController
.
Per quanto riguarda i meriti: sei sicuro che il riferimento a person
si sono passati al metodo è valido nel contesto della rubrica? Vorrei provare a utilizzare una funzione come ABAddressBookGetPersonWithRecordID
prima, invece di passare ABPersonRef
s in giro e li aspettavo di essere valida per i diversi riferimenti rubrica.
Altri suggerimenti
Tutte queste risposta non ha funzionato. Si dovrebbe semplicemente cambiare la vostra linea di codice da:
ABAddressBookRef addressBook = ABAddressBookCreate();
a:
ABAddressBookRef addressBook = [peoplePicker addressBook];
In questo modo si ottiene il riferimento alla "rubrica", "persona" a cui appartiene.
Ho anche provare a utilizzare per impostare l'immagine (Foto) della persona di corrente selezionato ma visualizzare massaggio salvato con successo ma in real non DOSE lavorare !!!
dopo la scavare il codice ei documenti forniti da Apple SDK, ho qualche passo con la seguente soluzione.
Si prega di controllare il codice qui sotto. la sua davvero lavorando bene per me e spero anche per voi.
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
@try {
CFErrorRef cfError = nil;
if (ABPersonHasImageData(person)) {
NSLog(@"%s has an image", _cmd);
//theAlert = [[UIAlertView alloc] initWithTitle:@"Contact already has an image" message:@"Are you sure you want to overwrite it?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Overwrite"];
//[theAlert show];
//[theAlert release];
//Note: We do not yet handle the answer to this question
}
// Just a sanity check
if ((nil == [imageView image])
|| (nil == UIImagePNGRepresentation([imageView image]))) {
NSLog(@"%s NIL STUFF", _cmd);
}
// Not sure I even need to create and save an address book
// Cf. https://devforums.apple.com/message/27512#27512
ABAddressBookRef libroDirec = ABAddressBookCreate();
ABPersonSetImageData(person, (CFDataRef) (UIImageJPEGRepresentation([imageView image], 1.0f)), &cfError);
ABAddressBookAddRecord(libroDirec, person, &cfError);
if (ABAddressBookSave(libroDirec, nil)) {
NSLog(@"%s saved successfuly", _cmd);
} else {
NSLog(@"%s something bad happen while saving", _cmd);
}
CFRelease(libroDirec);
}
@catch (NSException * e) {
}
@finally {
}
// TODO: release peoplePicker (and refactor code to not have it global)
[self dismissModalViewControllerAnimated:YES];
return NO;
}
Ho controllato il codice e non funziona come dovrebbe. Così ho fatto 2 cambi.
ABAddressBookRef libroDirec = [peoplePicker addressBook];//don't create
ABPersonSetImageData(person, (CFDataRef)UIImagePNGRepresentation(display.image), &cfError);
ABAddressBookAddRecord(libroDirec, person, &cfError);
if (ABAddressBookSave(libroDirec, nil)) {
NSLog(@"\n%s saved successfuly", _cmd);
} else {
NSLog(@"\n%s something bad happen while saving", _cmd);
}
//CFRelease(libroDirec);
Ora funziona come dovrebbe.