2015-06-05 6 views
1

Я пытаюсь сохранить ABRecordID существующего контакта из адресной книги в основные данные. У меня есть Int32 определены в моей модели, но для того, чтобы сохранить свой объект там мне нужно преобразовать ABRecordID (которая является Int32) в NSNumberПреобразование ABRecordID в NSNumber всегда -1

Вот мой код, который преобразует его:

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) { 
    let multiValue: ABMultiValueRef = ABRecordCopyValue(person, property).takeRetainedValue() 
    let index = ABMultiValueGetIndexForIdentifier(multiValue, identifier) 
    let pickedVal = ABMultiValueCopyValueAtIndex(multiValue, index).takeRetainedValue() as! String 

    let theRecord = recordIdFromPersonRecord(person) 
    println(ABRecordGetRecordID(person!)) 

func recordIdFromPersonRecord (personRecord: ABRecord) -> NSNumber { 
    let recordId = ABRecordGetRecordID(personRecord) 
    println(personRecord) 
    return (NSNumber(int: recordId)) 
} 

Этот код всегда печатает -1 в консоли, независимо от того, какую запись я выбираю в своей адресной книге. Я программист новичков, и я полностью застрял.

Благодарим за помощь!

EDIT: Commenter ниже указано, что это значение зарезервировано для записей, которые не существуют в базе данных адресной книги ...

Это сбивает с толку. Я просто просматриваю AB, чтобы получить значение имени и идентификатор из существующих записей ... как существующие записи не имеют записи, сохраненной в базе данных адресной книги? Вот что такое определение из документов: Записи с этим идентификатором не были сохранены в базе данных адресной книги. Я не понимаю?

+0

«-1» - значение для специального идентификатора записи 'kABRecordInvalidID'. См. Документы для 'ABRecordGetRecordID'. – rmaddy

+0

Это запутанно. Я просто просматриваю AB, чтобы получить значение имени и идентификатор из существующих записей ... как существующие записи не имеют записи, сохраненной в базе данных адресной книги? Вот что такое определение из документов: Записи с этим идентификатором не были сохранены в базе данных адресной книги. Я не понимаю? – Charlie

ответ

0

В iOS 8 вы можете просматривать контакты без запроса разрешения на адресную книгу (потому что вы можете, например, разрешить пользователю выполнять действие по умолчанию при возвращении фактических данных в приложение). Но чтобы получить данные о контакте, вы должны явно запросить разрешение на это.

Возможно, вы использовали адресную книгу AddressBookUI.framework для представления пользовательского интерфейса контакта, но никогда не запрашивали разрешения на доступ к данным о контакте.

+0

OMG вы кажетесь кабба. Проблема в том, что я не просил разрешения. Большое вам спасибо, эту информацию было нелегко найти !!!! Для других с этой проблемой, вот ссылка, объясняющая эти шаги разрешения: http://ashishkakkad.com/tag/abaddressbookrequestaccesswithcompletion/ – Charlie