2011-12-20 1 views
1
- (void)request:(FBRequest *)request didLoad:(id)result { 


     // NSArray *resultData = [result objectForKey:@"data"]; 
     NSMutableArray *photos = [[NSMutableArray alloc] initWithCapacity:1]; 
     // imageArray = [[NSMutableArray alloc] initWithCapacity:1]; 
     NSArray *resultData = [result objectForKey:@"data"]; 
     if ([resultData count] > 0) 
     { 
      noOfImages = 0; 

      for (NSUInteger i=0; i<[resultData count] ; i++) 
      { 
       [photos addObject:[resultData objectAtIndex:i]]; 
       NSDictionary *albumPhotos = [photos objectAtIndex:i]; 
       NSString *imageUrl = [albumPhotos objectForKey:@"picture"]; 
       NSLog(@"ImageURL:%@",imageUrl); 
       NSURL *url = [NSURL URLWithString:imageUrl]; 
       // [slideImageArray addObject:url]; 
       NSData *data = [NSData dataWithContentsOfURL:url]; 
       UIImage *images = [UIImage imageWithData:data]; 
       // imageView.image = images; 
       [slideImageArray addObject:images]; 

       [NSThread detachNewThreadSelector:@selector(startTheBackgroundJob:) toTarget:self withObject:images]; 





      } 

      NSLog(@"ImageCount:%d",[slideImageArray count]); 

      if([slideImageArray count] == 1) 
      { 
       imageView.image = [slideImageArray objectAtIndex:0]; 
      } 

      if([slideImageArray count]>1) 
      { 
       numTimer =0;  
       myTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerRunning) userInfo:nil repeats:YES]; 
      } 



     } 






} 



- (void)request:(FBRequest *)request didFailWithError:(NSError *)error { 
    NSLog(@"Err message: %@", [[error userInfo] objectForKey:@"error_msg"]); 
    NSLog(@"Err code: %d", [error code]); 
    } 

- (void)startTheBackgroundJob:(UIImage *)img 
{ 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // wait for 3 seconds before starting the thread, you don't have to do that. This is just an example how to stop the NSThread for some time 
    //imageView.image = img; 
    noOfImages++; 
    // [NSThread sleepForTimeInterval:3]; 
    // [slideImageArray addObject:img]; 

    //[NSThread sleepForTimeInterval:1]; 
    imageView.image = img; 
    if(noOfImages == 1) 
    { 
     NSLog(@"noValueif:%d",noOfImages); 
     // imageView.image = [slideImageArray objectAtIndex:0]; 
     [NSThread sleepForTimeInterval:1]; 
     // imageView.image = img; 
    } 

    else if(noOfImages >1) 
    { 
     NSLog(@"noValue:%d",noOfImages); 
//  numTimer =0;  
//  myTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerRunning) userInfo:nil repeats:YES]; 
     // imageView.image = img; 
     [NSThread sleepForTimeInterval:3]; 

    } 



    // [self performSelectorOnMainThread:@selector(changeImageViewImage) withObject:nil waitUntilDone:NO]; 
    [pool release]; 

} 

Je dois exécuter un fil de fond pour obtenir l'image de l'album Facebook. Je dois commencer un diaporama avec la première image collectée. Et je donne un sommeil de 3 secondes mais il ne fonctionne pas. Il existe également une autre méthode pour obtenir l'image de l'URL autre que NSData * data = [NSData dataWithContentsOfURL: url]; méthodeFil d'arrière-plan en cours d'exécution pour récupérer l'image de l'album Facebook

Répondre

0

Avez-vous déjà trouvé la réponse à cette question? Ou étiez-vous capable de le résoudre?

Et pour cette API facebook, utilisez-vous une sous-classe personnalisée de NSThread ou utilisez-vous les files d'attente Dispatch? PerformSelectorONMainThread ... Pour répondre à votre question si vous voulez récupérer des données en arrière-plan utilisez performSelectorONMainThread ... certaines méthodes SDK de Facebook doivent être exécutées sur le thread principal pour qu'elles fonctionnent, dans mon expérience personnelle, j'ai découvert que la plupart des la demande de données est nécessaire pour être sur le thread principal en utilisant cette méthode.

Cela a fonctionné pour moi, j'espère que cela fonctionne pour vous :).

Questions connexes