Фоновый поток работает для получения изображения из альбома Facebook - PullRequest
1 голос
/ 20 декабря 2011
- (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. Мне нужно запустить слайд-шоу с первым собранным изображением. И я поспал 3 секунды, но он не работает. Также есть какой-то другой метод для получения изображения из URL, отличного от NSData * data = [NSData dataWithContentsOfURL: url]; Метод

1 Ответ

0 голосов
/ 25 марта 2012

Вы когда-нибудь находили ответ на этот вопрос? или вы смогли решить это?

А для этого API Facebook вы используете персонализированный подкласс NSThread или очереди рассылки?

И чтобы ответить на ваш вопрос, если вы хотите получать данные в фоновом режиме, используйте executeSelectorONMainThread ... некоторые методы SDK facebook должны быть запущены в главном потоке для их работы, по своему личному опыту я обнаружил, что большинство из Запрашивать данные необходимо, чтобы этот метод находился в основном потоке.

Это сработало для меня, надеюсь, это работает для вас :.)

...