2015-10-05 5 views
1

В iOS можно создавать пользовательские ярлыки для телефонных номеров и адресов электронной почты. Есть ли способ удалить эти созданные метки программно (с CNContacts или ABAddressBook)? Другими словами: я не хочу удалять пользовательский ярлык из контакта, я хочу удалить «настраиваемую метку» из системы, чтобы он не отображался вообще, когда кто-то открывает доступный список.Программно удалить пользовательские метки телефона

Прилагается исходный код iOS 9, который создает контакт в телефонной книге с пользовательскими ярлыками в поле электронной почты.

func createContact() { 

    let contactStore = CNContactStore() 
    let newContact = CNMutableContact() 

    newContact.givenName = "Chris" 
    newContact.familyName = "Last" 

    let homeEmail = CNLabeledValue(label: "RandomLabel", value: "[email protected]") 
    newContact.emailAddresses = [homeEmail] 

    do { 
     let saveRequest = CNSaveRequest() 
     saveRequest.addContact(newContact, toContainerWithIdentifier: nil) 
     try contactStore.executeSaveRequest(saveRequest) 
    } 
    catch { 
     NSLog("Save failed") 
    } 
} 

ответ

0

Контакт Framework + deleteContact

This может помочь вам.

Использование this function

EDIT: Я в хороший день:

NSOperationQueue().addOperationWithBlock{[unowned store] in 
    let predicate = CNContact.predicateForContactsMatchingName("john") 
    let toFetch = [CNContactEmailAddressesKey] 

    do{ 

    let contacts = try store.unifiedContactsMatchingPredicate(predicate, 
     keysToFetch: toFetch) 

    guard contacts.count > 0 else{ 
     print("No contacts found") 
     return 
    } 

    //only do this to the first contact matching our criteria 
    guard let contact = contacts.first else{ 
     return 
    } 

    let req = CNSaveRequest() 
    let mutableContact = contact.mutableCopy() as! CNMutableContact 
    req.deleteContact(mutableContact) 

    do{ 
     try store.executeSaveRequest(req) 
     print("Successfully deleted the user") 

    } catch let e{ 
     print("Error = \(e)") 
    } 

    } catch let err{ 
    print(err) 
    } 
} 

EDIT: Кажется, вы можете, но вам нужно сделать пакетную функцию следующим образом:

  • выборки контакты с использованием AddressBook/ABAddressBookCopyArrayOfAllPeople
  • Для ... в контактах
  • получить ABRecordCopyValue получить ABMultiValueRef вы хотите
    • kABPersonEmailProperty
    • kABPersonAddressProperty
    • kABPersonPhoneProperty
  • Для ... в в их
  • Получить тока с ABMultiValueCopyLabelAtIndex
  • Сравнить на этикетках по умолчанию (примечание here to get the default one)
  • , если не матча, удалить его

Надеется, что это помогает вам

EDIT 2: Мех, ABAddressBook осуждается, что вам нужно сделать то же самое с New contact framework ... Удачи !!

+0

Это удаляет контакт в телефонной книге. Это не то, что я ищу. Я хочу удалить пользовательскую метку из системы, а не контакт, или изменить поля пользователя в телефонной книге. – hashier

+0

О, мой плохой, я не читал правильно. Не уверен, что вы можете удалить его: похоже, что даже после удаления приложения, которое добавляет пользовательский ярлык, они остаются здесь – jlngdt

+0

Да, они в системе. Хотелось бы убрать их. Спасибо, в любом случае. – hashier

Смежные вопросы