2014-11-19 5 views
3

Эта строка кода в Swift вызывает у меня проблемы, когда адресная книга имеет контакт без фамилии.ABRecordCopyValue не работает, когда объект не существует

Я пытался решить его несколькими способами безрезультатно. Есть ли какая-то попытка catch catch или обработка ошибок, которую я могу использовать? Или проверить, если AnyObject равно нулю (тип возвращаемого

ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()). 

Я попытался использовать дополнительные типы, но это, кажется, не работает, так как приложение останавливается в тот момент, вы выбираете контакт с без фамилии - и строка кода ниже подсвечивается с Нить ошибки

1: EXC_BAD_ACCESS

let lName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as String 

ответ

3

ABRecordCopyValue может фактически возвратить нуль, поэтому вы должны развернуть его. Кроме того, кастинг для String не работал для меня, поэтому я использую NSString.

if let firstName = ABRecordCopyValue(abContact, kABPersonFirstNameProperty)?.takeRetainedValue() as? NSString { 
    println("FIRST NAME: \(firstName)") 
} 
else { 
    println("No Name") 
} 

Другая вещь, которую вы могли бы попробовать это вместо того, чтобы первый и LastName индивидуально, можно также попытаться получить составленную имя.

if let fullName = ABRecordCopyCompositeName(abContact)?.takeRetainedValue() as String? { 
    println("Full Name: \(fullName)") 
} 

P.S: Я также пробовал все ответы от this question но несмотря сделать идеальный смысл и работать при отладке приложения, они разбились, когда я развернула архив непосредственно в телефон.