Я реализовал Facebook Connect в своем приложении, как пример приложения, предоставляемого Facebook, и он работает хорошо. После того, как пользователь решил поделиться данными через Facebook, они переходят в новый вид и представляются в диалоге входа в FB. Когда пользователь завершит работу, он выйдет из режима общего доступа к FB и вернется к предыдущему виду моего приложения. Пользователь остается в системе до тех пор, пока он не выходит из системы, даже если он выходит из режима общего доступа к FB. Это хорошо и, как и ожидалось.
Я использую тот же метод viewDidLoad, что и образец SessionViewController.m, и именно здесь инициализируется _session:
- (void)viewDidLoad {
[_session resume];
_loginButton.style = FBLoginButtonStyleWide;
}
Однако я заметил, что если пользователь нажимает кнопку «Выход из системы» после выхода и повторной загрузки представления общего доступа к FB, он выдает SIGABRT или EXC_BAD_ACCESS и вылетает из приложения. Ошибка EXC_BAD_ACCESS возникает в строке [диалоговое окно] метода touchUpInside кнопки «Вход»:
- (void)touchUpInside {
if (_session.isConnected) {
[_session logout];
} else {
FBLoginDialog* dialog = [[[FBLoginDialog alloc] initWithSession:_session] autorelease];
[dialog show];
}
Несмотря на то, что пользователь подключен, метод touchUpInside видит отключенный сеанс ... Иногда вместо сбоя после нажатия кнопки «Выход», выход из системы будет успешным, но текст состояния представления остается «Зарегистрировался как ...», и кнопки установки статуса / загрузки изображения не скрыты. Попытка войти снова выдает SIGABRT, который выглядит из-за нулевого _session.sessionKey в FBRequest.m: 344:
[_params setObject:_session.sessionKey forKey:@"session_key"];
Есть ли что-то, что я должен сохранять или делать по-другому при изменении вида?
РЕДАКТИРОВАТЬ: Я нашел другого пользователя с такой же проблемой на форумах разработчиков Facebook:
http://forum.developers.facebook.com/viewtopic.php?pid=193727#p193727
Решение не опубликовано, но если я найду его, я обновлю этот вопрос.