Пользовательский запрос API Graph на iPhone SDK - PullRequest
0 голосов
/ 27 марта 2011

Можно ли сделать пользовательский вызов API Graph с помощью FBConnect?

Например,

[facebook requestWithGraphPath:@"me" andDelegate:self];

При этом вызове я вижу свои собственные данные.

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

С этим я могу видеть своих друзей.

[facebook requestWithGraphPath:@"FRIEND_ID/picture" andDelegate:self];

С этим я могу видеть фотографию от друга с id = FRIEND_ID.

Есть ли возможность сделать кастомВызов API API для получения идентификатора, изображения, имени и, например, электронной почты всех моих друзей из Facebook за один звонок?

Проблема, которая возникает у меня при вызове:

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

В:

- (void)request:(FBRequest *)request didLoad:(id)result;

Я беру идентификаторы своих друзей, а затем в цикле for я хочу сделать это:

[[self appDelegate].facebook requestWithGraphPath:[NSString stringWithFormat:@"%@/picture",[[party.attendantsDictionary allKeys] objectAtIndex:i]] andDelegate:self];

Впоследствии, в

- (void)request:(FBRequest *)request didLoad:(id)result;

У меня есть:

if ([result isKindOfClass:[NSData class]]) {
    [party.attendantsPictures addObject:[[UIImage alloc] initWithData:result]];
}

Проблема в том, что все фотографии и имена моих друзей перепутаны.

У кого-нибудь есть решение?

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Хммм, я никогда не использовал NSRunLoop. Не могли бы вы дать мне подсказку, что это такое? (Документы Apple немного сбивают с толку ...).

В вашем случае я бы сделал что-то вроде этого:

NSString *fql = @"SELECT name, uid, pic_square, status FROM user WHERE uid = me() OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())";
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:fql, @"query", nil];
[facebook requestWithMethodName:@"fql.query" andParams:params andHttpMethod:@"POST" andDelegate:self];

Таким образом, вы получите от пользователей все, что захотите.

0 голосов
/ 28 марта 2011

Вы можете попробовать NSRunLoop.

В моем случае я хочу загрузить имя пользователя, статус, изображение профиля сразу.Однако requestWithGraphPath и его делегат didload: result определенно могут обрабатывать каждый запрос одновременно.Итак, что я сделал:

1 / Установите номер тега

2 / После каждого запроса дождитесь завершения запроса, увеличьте номер тега на 1

в моем действии кнопки,

tagNo = 0;
[facebook requestWithGraphPath:graphPathZero // For user's name
                       andDelegate:detailVC];
while ( tagNo == 0) && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

[facebook requestWithGraphPath:graphPathOne // For user's status
                       andDelegate:detailVC];
while ( tagNo == 1) && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

[facebook requestWithGraphPath:graphPathTwo // For user's profile picture
                       andDelegate:detailVC];
while ( tagNo == 2) && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

А в делегате,

switch (tagNo) {
case 0:
    // Do something with result
    break;
case 1:
    // Do something with result
    break;
case 2:
    // Do something with result
    break;
default:
    break;
}
++tagNo;

Я не могу описать здесь «Делать что-то с результатом», поскольку это где-то еще в stackoverflow.Возможно, это не решение проблемы, но я нашел его доступным.Ищите дополнительные материалы от других;)

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