2015-11-24 2 views
1

Вот лучший пример:Приложение сбоями, когда номер телефона не присутствует

let person: ABRecordRef = ABPersonCreate().takeRetainedValue() 

let phoneNos = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() 

if ABMultiValueGetCount(phoneNos) > 0 { 
    print("yay") } else { 
    print("nay") //you will never see this } 

Всегда выходит из строя.

let person: ABRecordRef = ABPersonCreate().takeRetainedValue() 
//lets add a number then 
let phoneNumbers: ABMutableMultiValue = 
ABMultiValueCreateMutable(ABPropertyType(kABMultiStringPropertyType)).takeRetainedValue() 
ABMultiValueAddValueAndLabel(phoneNumbers, "1234", kABPersonPhoneMainLabel, nil) 
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumbers, nil) 

let phoneNos = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() 

if ABMultiValueGetCount(phoneNos) > 0 { 

    print("yay") 
} else { 
    print("nay") //you will never see this 
} 

Работы просто отлично. Мне нужно проверить, есть ли номер телефона, как # $ ^% я должен сделать это, когда ABRecordCopyValue не может вернуть нуль без взрыва.

+0

Вы пробовали это: 'http://stackoverflow.com/questions/24534436/check-if-abmultivalueref-is-has -no-values'? –

+0

я уверен. Я не мог понять, как это применимо. Они рушились без контакта, а не числа для контакта, поэтому они скопировали его в массив, чтобы получить количество людей. Если я даже коснусь 'ABRecordCopyValue' с' kABPersonPhoneProperty', возвращающим нуль, он сработает. – user0000001

ответ

0

Следующее предотвратит сбой, если ABRecordCopyValue возвращает nil; но в случае, если будет возвращаемое значение, оно будет храниться в phoneNos:

if let phoneNos = ABRecordCopyValue(person, kABPersonPhoneProperty)?.takeRetainedValue() 
{ 
    print("\(person)'s phone number: \(phoneNos)") 
} 
else 
{ 
    print("nay") 
} 
+1

Красивое решение, спасибо ОЧЕНЬ много! – user0000001

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