2016-03-26 2 views
0

У меня есть класс «Контакт», который управляет личной информацией некоторых людей. Теперь я хочу, чтобы сохранить некоторые из этой информации, используя контактную Framework введен с прошивкой 9.Телефонный массив Contact Framework

Мой Контакт класс имеет

  • домашнего номера (huisnummer на голландском языке)
  • Мобильный телефон (Mobiel на голландском языке)

Поскольку некоторые из контактов не имеют домашнего номера и некоторые из контактов не имеют номер мобильного телефона это трудно для меня, чтобы создать массив:

// cnContact is an object of the Contact Framework class 
// contact is an object of my Contact class 

if let huisnummer = contact.huisnummer { 
    if let mobiel = contact.nummer { 
     cnContact.phoneNumbers = [CNLabeledValue(label: CNLabelPhoneNumberMain, value: CNPhoneNumber(stringValue: huisnummer)),CNLabeledValue(label: CNLabelPhoneNumberMobile, value: CNPhoneNumber(stringValue: mobiel))] 
    } else { 
     [CNLabeledValue(label: CNLabelPhoneNumberMain, value: CNPhoneNumber(stringValue: huisnummer))] 
    } 
} else { 
    if let mobiel = contact.nummer { 
     cnContact.phoneNumbers = [CNLabeledValue(label: CNLabelPhoneNumberMobile, value: CNPhoneNumber(stringValue: mobiel))] 
    } 
} 

Мне нужно продолжить проверку с использованием условий SWIFT, если указанное число существует. Но я думал, так как это неэффективный способ сохранить эти контакты, что должен быть более эффективный способ сохранить это.

Как вы можете создать телефонные номера cnContact более эффективным способом?

+1

Марло, какие проблемы вы сталкиваетесь сейчас? – user3182143

+1

Вы хотите получать контакты с iPhone с помощью Contact framework? – user3182143

+0

Проблема, с которой я столкнулся, создает (не извлекает) контакты с иногда только мобильным номером, иногда только основным номером, а иногда и тем и другим. Я делаю это с использованием вышеприведенного кода, но это циклы условных выражений, в то время как я чувствую, что должен быть более эффективный способ создания контакта из-за дублирования кода (вложенные, если позволяют инструкции с тем же запущенным кодом создания массива). Но пока я печатал это, я понял решение :-) Я отредактирую исходный вопрос, чтобы стало ясно! – Emptyless

ответ

0

Ответ не имел ничего общего с быстрым или контактов основы, а скорее с программированием 1х1. Это должно было поздно, что я не выясняли решение назад, чем, но отправляя решение в любом случае:

// Creating empty array of CNLabeledValues 
var phoneNumbers : [CNLabeledValue] = [] 

// Add the mobile number to the array: 
if let mobiel = contact.nummer { 
    phoneNumbers.append(CNLabeledValue(label: CNLabelPhoneNumberMobile, value: CNPhoneNumber(stringValue: mobiel))) 
} 

// Add the Main number to the array: 
if let huisnummer = contact.huisnummer { 
    phoneNumbers.append(CNLabeledValue(label: CNLabelPhoneNumberMain, value: CNPhoneNumber(stringValue: huisnummer))) 
} 

// Add the array to the Contacts Framework contact 
cnContact.phoneNumbers = phoneNumbers 

Вот это :-)

1

Марло Fetching контакты из iPhone с помощью контактов рамки

lazy var contacts: [CNContact] = { 
    let contactStore = CNContactStore() 
    let keysToFetch = [ 
     CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName), 
     CNContactEmailAddressesKey, 
     CNContactPhoneNumbersKey, 
     CNContactImageDataAvailableKey, 
     CNContactThumbnailImageDataKey] 

    // Get all the containers 
    var allContainers: [CNContainer] = [] 
    do { 
     allContainers = try contactStore.containersMatchingPredicate(nil) 
    } catch { 
     print("Error fetching containers") 
    } 

    var results: [CNContact] = [] 

    // Iterate all containers and append their contacts to our results array 
    for container in allContainers { 
     let fetchPredicate = CNContact.predicateForContactsInContainerWithIdentifier(container.identifier) 

     do { 
      let containerResults = try contactStore.unifiedContactsMatchingPredicate(fetchPredicate, keysToFetch: keysToFetch) 
      results.appendContentsOf(containerResults) 
     } catch { 
      print("Error fetching results for container") 
     } 
    } 

    return results 
}() 

Функция Разрешение Разрешение

func askForContactAccess() 
{ 
    let authorizationStatus = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts) 
    switch authorizationStatus { 
    case .Denied, .NotDetermined: 
     self.contactStore.requestAccessForEntityType(CNEntityType.Contacts, completionHandler: { (access, accessError) -> Void in 
     if !access { 
      if authorizationStatus == CNAuthorizationStatus.Denied { 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       let message = "\(accessError!.localizedDescription)\n\nPlease allow the app to access your contacts through the Settings." 
       let alertController = UIAlertController(title: "Contacts", message: message, preferredStyle: UIAlertControllerStyle.Alert) 
       let dismissAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { (action) -> Void in 
       } 
       alertController.addAction(dismissAction) 
       self.presentViewController(alertController, animated: true, completion: nil) 
      }) 
     } 
     } 
    }) 
    break 
     default: 
    break 
} 
} 

Contact - Authorization,Fetch,Add,Update,Search

Contacts Data

Retreive Contacts Data

AppCoda - Contacts