Facebook SDK на ios5 вызывает сбой - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь интегрировать Facebook SDK в проект iOS5, который я создаю.

Следуя совету, я установил флаги компилятора в определенных файлах Facebook на '-fno-objc-дуга.Это позволяет мне успешно строить проект, сохраняя при этом ARC для моих файлов.

Я прошел и реализовал основные шаги Facebook SDK, и он успешно входит в систему и устанавливает разрешения.Проблема возникает, когда я пытаюсь получить доступ к графику:

[facebook requestWithGraphPath:@"me/friends" andDelegate:(id)self];

Причина, по которой я говорю «(id) self» вместо просто «self», заключается в том, что последний выдает мне ошибку:

warning: sending 'PhotoController *__strong' to parameter of incompatible type 'id<FBRequestDelegate>' [3]

Я реализовал все методы обратного вызова.Единственный метод, который успешно вызывается, это

- (void)requestLoading:(FBRequest *)request;

Я полагаю, что приложение падает при получении данных.

По предложениям в других потоках я включил NSZombie и вот результаты:

2011-11-14 13:40:29.896 Friend Carousel[9660:f803] facebook: <Facebook: 0x6e21550>
2011-11-14 13:40:29.898 Friend Carousel[9660:f803] self: <PhotoController: 0x6e215a0>
2011-11-14 13:40:31.115 Friend Carousel[9660:f803] *** -[PhotoController respondsToSelector:]: message sent to deallocated instance 0x6e215a0

Где facebook - это объект facebook, а PhotoController - это делегат (с этим методом определен).

Так что может показаться, что объект запроса Facebook пытается отправить сообщениеуже освобожденный делегат.Правильно?И это то, что вызывает сбой?

К сожалению, это то, где мои знания iOS меня подводят;это что-то, что я делаю неправильно, или я просто не могу включить Facebook SDK в проект с поддержкой ARC (без значительных изменений)?Я просто не уверен, куда идти.

Спасибо,

Кевин

1 Ответ

1 голос
/ 14 ноября 2011

Я возьму удар здесь. Моим диким предположением было бы посмотреть, где расположен PhotoController. Если он не сохраняется в ivar и просто передается объекту Facebook, то имеет смысл аварийно завершить работу, поскольку свойства делегата не должны сохраняться. Другими словами, вы не можете полагаться на объект Facebook, сохраняющий PhotoController, поскольку это плохая практика с объектами делегатов. (Предполагается, что делегаты являются слабыми ссылками.) Где бы ни размещался и сохранялся объект Facebook, вам, вероятно, следует также сохранить копию PhotoController и хранить ее в течение жизни объекта Facebook.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...