У меня есть класс, который я использую для взаимодействия с Facebook в Objective C для приложения iPhone.
GWFacebook.h
@interface GWFacebook : Facebook <FBRequestDelegate>
{
bool query_running;
NSArray* query_result;
}
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error;
- (void)request:(FBRequest *)request didLoad:(id)result;
- (void)LogIn;
- (NSArray*)getAllFriends;
@end
GWFacebook.m
#import "GWFacebook.h"
@implementation GWFacebook
- (void)request:(FBRequest *)request didLoad:(id)result
{
query_result = result;
query_running = false;
}
- (NSArray*)getAllFriends
{
NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"SELECT first_name, last_name, uid, pic_big FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY mutual_friend_count desc",@"query",nil];
query_running = true;
bool localbool = true;
[self requestWithMethodName: @"fql.query" andParams: params andHttpMethod: @"POST" andDelegate: self];
while(localbool)
localbool = query_running;
return query_result;
}
@end
По сути, функция getAllFriends делает запрос fb и устанавливает этот объект как делегат запроса facebook. Затем вызывается запрос функции didLoad делегата (self), который использует переменную для передачи данных обратно в функцию getAllFriends, которая затем возвращает их тому, кто их вызвал.
Суть в том, что я пытаюсь использовать цикл while для остановки функции, пока она не получит ответ. При отладке ясно, что функция didload запроса никогда не вызывается объектом facebook. Он вызывается, когда я удаляю цикл while ... таким образом, запрос данных выполнен успешно, и проблема заключается в цикле while.
Мне интересно, есть ли способ остановить функцию, пока данные не будут получены ... Я, вероятно, делаю что-то очень глупое, поэтому мне нужна помощь!
Спасибо