2011-12-20 38 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]; 

} 

我要運行從Facebook相冊越來越像一個後臺線程。我要開始放映幻燈片與第一圖像collected.and我給睡眠3秒但它不工作。也有任何其他的方法來從URL獲取圖像以外的NSData * data = [NSData dataWithContentsOfURL:url];方法後臺線程從Facebook相冊獲取圖像運行

回答

0

你有沒有找到這個問題的答案??或者能夠解決它?

對於這個Facebook的API,你使用的NSThread個性化的子類或使用調度隊列?

並回答你的問題,如果你想要在後臺獲取數據使用performSelectorONMainThread ...一些Facebook的SDK方法需要運行在主線程上工作,在我個人的經驗中,我發現大部分請求的數據必須在使用這種方法的主線程上。

它爲我工作,希望它適合你 :)。