Я ищу полное и полное объяснение лучшего способа получить фотографии профиля для друзей Facebook (чьи идентификаторы Facebook хранятся в массиве). В другом месте в моем приложении, я использую следующий код, чтобы получить изображение текущего пользователя:получение фотографий профиля Facebook для набора друзей в фоновом режиме
...
...
// Create request for user's Facebook data
FBRequest *request = [FBRequest requestForMe];
// Send request to Facebook
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"no fb error");
// result is a dictionary with the user's Facebook data
NSDictionary *userData = (NSDictionary *)result;
// Download the user's facebook profile picture
self.imageData = [[NSMutableData alloc] init]; // the data will be loaded in here
// URL should point to https://graph.facebook.com/{facebookId}/picture?type=large&return_ssl_resources=1
NSURL *pictureURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=square&return_ssl_resources=1", userData[@"id"]]];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:pictureURL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:2.0f];
// Run network request asynchronously
NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
if (!urlConnection) {
NSLog(@"Failed to download picture");
}
}
}];
}
// Called every time a chunk of the data is received
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.imageData appendData:data]; // Build the image
}
// Called when the entire image is finished downloading
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[[PFUser currentUser] setObject:self.imageData forKey:@"image"];
[[PFUser currentUser] saveInBackground];
}
Этот подход, кажется, есть преимущество загрузки данных в фоновом режиме, но мне кажется, что это может быть сложно реализовать как часть цикла for
, в котором я просматриваю набор друзей пользователя Facebook, чтобы получить их изображения профиля, так как он вызывает несколько методов делегатов, и тогда мне нужно будет отслеживать, какие данные изображения друга были получены в методах делегата ,
Было бы даже возможно отслеживать, какие данные изображения друга были получены в методах делегата, учитывая, что цикл цикла, повторяющийся через этих друзей, будет выполняться в основном потоке и завершен до того, как сбор данных завершится для предыдущего итерации (я считаю)?
Я предполагаю, что одним из способов решения этой проблемы будет выполнение цикла for for в фоновом потоке, где я не перебираю следующего друга, пока текущий не соберет все его данные. И тогда мне не нужно будет использовать асинхронный вызов NSURLConnection
. И это, вероятно, упростит код совсем немного. Будет ли это хорошим решением, и если да, то как мне создать такой фоновый процесс?
Или какое другое решение вы рекомендуете?
но логика ускользает от меня .... вы это делаете для 200 друзей, но всегда для того же ключа PFUser .. так что только 1 изображение делает его для разбора –
нет необходимости в нитке здесь .. all async –
Спасибо. В моем сообщении упоминается: «В другом месте моего приложения я использую следующий код, чтобы получить изображение текущего пользователя:« Вот почему код в моем сообщении имеет только один PFUser. Похоже, что этот метод с обработчиком очереди и завершения должен быть хорошим решением. Я скоро сделаю это. – mkc842