2015-07-30 1 views
4

Какой метод лучше решить, какой пользователь вошел в систему?ubiquityIdentityToken против CKContainer accountStatusWithCompletionHandler

let ubiquityIdentityToken = NSFileManager.defaultManager().ubiquityIdentityToken 

возвращает токен, и клиент может сравнить его, как и в прошлый раз. Преимущество в том, что он возвращает токен, если устройство также отключено.

accountStatusWithCompletionHandler возвращает только значение статуса, но не идентификатор или токен о том, кто вошел в систему. Поэтому в автономном режиме это бесполезно.

Я прав?

Моя другая проблема, что иногда даже пользователь вошел в систему и онлайн ubiquityIdentityToken возвращает nil.

Как получить идентификатор пользователя при запуске?

ответ

3

Если вы используете CloudKit, то метод CKContainer accountStatusWithCompletionHandler - это то, как вы должны проверить, зарегистрирован ли пользователь в iCloud или нет (поддерживается с iOS 8.0). CloudKit Quick Start shows an example как его использовать.

fetchUserRecordIDWithCompletionHandler как вы должны получить идентификатор записи пользователя, который привязан к этому контейнеру CloudKit, но тот же для учетной записи iCloud на всех устройствах.

В iOS 9.0 у вас также будет CKAccountChangeNotification, который уведомит ваше приложение, когда статус iCloud на устройстве изменится.

+1

Я получаю странную ошибку, зарегистрированную в iCloud, но 'accountStatusWithCompletionHandler' возвращает значение' .NoAccount'. Я предполагаю, что этот метод работает, только если используется частная база данных, но я использую только общедоступную БД. http://stackoverflow.com/questions/34091839/ckcontainer-accountstatuswithcompletionhandler-returns-wrong-value –

+0

@ János У меня такая же проблема теперь с использованием Simulator с базой данных разработки. Ищете кого-то, кто понял, в чем проблема. Это происходит только в одном кодовом пути - коротком - и не на более длинном пути. –

+0

@ János Я понял это - класс, который запрашивал информацию об учетной записи, освобождался, а accountStatusWithCompletionHandler находился в процессе. По какой-либо причине, которая вызывает проблему (или она может быть кратным таким запросам, не совсем уверен). –