Обновление CNContact с помощью unifiedContactWithIdentifier: не разрешает редактирование возвращенного контакта после однократного редактирования записи контакта - PullRequest
0 голосов
/ 03 октября 2018

шагов, чтобы вызвать проблему - отредактируйте поле в CNContact, так что давайте предположим, что я редактирую электронное письмо "домой по электронной почте".редактирование работает успешно

- (void)doUpdateField {
    NSString * tempString = [[[self contentView] phoneField] text];

    [self.navigationItem setRightBarButtonItem:self.loadingView];
    [self.activityView startAnimating];

    CNMutableContact * contactToUpdate = [self.incomingContact mutableCopy];
    NSMutableArray * arrEmails = [self.incomingArray mutableCopy];
    [arrEmails removeObjectAtIndex:self.incomingIndexPath.row];
    CNLabeledValue * label = self.incomingArray[self.incomingIndexPath.row];

    CNLabeledValue * emailValue = [CNLabeledValue labeledValueWithLabel:label.label value:tempString];

    [arrEmails addObject:emailValue];
    [contactToUpdate setEmailAddresses:arrEmails];

    NSError *error;
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest updateContact:contactToUpdate];

    BOOL success = [self.contactStore executeSaveRequest:saveRequest error:&error];
    if (success) {
        NSLog(@"success");
        [self.navigationItem setRightBarButtonItem:self.normalButton];
        [self.activityView stopAnimating];
    } else {
        NSLog(@"error %@", error);
        [self.navigationItem setRightBarButtonItem:self.normalButton];
        [self.activityView stopAnimating];
    }
}

-i, затем обновите контакт так, чтобы повторить информацию

CNContact * refreshedContact = [self.contactStore unifiedContactWithIdentifier:self.incomingContact.identifier keysToFetch:keys error:&error];

-i, затем попробуйте отредактировать другое поле в refreshedContact, но я получаю следующееошибка:

Error Domain=CNErrorDomain Code=2 "(null)" UserInfo={CNKeyPaths=(
    emailAddresses
)}

это абсолютно бессмысленно, я понятия не имею, почему я могу редактировать контакт только один раз.я не получаю эту ошибку, если я никогда не позвоню функции, чтобы обновить контакт.если я не обновляю контакт, я могу продолжить обновление CNContact, как обычно.любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 04 октября 2018

Я только что понял это.Рамки контактов это бардак.вместо того, чтобы звонить

CNLabeledValue * emailValue = [CNLabeledValue labeledValueWithLabel:label.label value:tempString];

, вы должны вызвать это

CNLabeledValue * emailValue = [label labeledValueBySettingValue:tempString];

, теперь это работает.причина, по которой он работает, заключается в том, что ему не присвоен новый идентификатор.посмотрите документы по яблоку.

...