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?

È stato utile?

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 ABPersonRefs 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top