iOS Извлечение данных с сервера - PullRequest
1 голос
/ 05 февраля 2012

Я нашел этот код (похоже, пришлось его подправить) о том, как получать данные с сервера, но по какой-то причине он не работает.Он останавливается на: "dispatch_async(kBgQueue, ^{", (строка 10).Пожалуйста, помогите, я очень новичок в программировании для iOS.

#import "ViewController.h"
@implementation ViewController

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1
#define kLatestKivaLoansURL [NSURL URLWithString:     @"http://api.kivaws.org/v1/loans/search.json?status=fundraising"] //2
- (void)viewDidLoad 
{
    [super viewDidLoad];

    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL: 
                        kLatestKivaLoansURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) 
                               withObject:data waitUntilDone:YES];
    });
}

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization 
                          JSONObjectWithData:responseData //1

                          options:kNilOptions 
                          error:&error];

    NSArray* latestLoans = [json objectForKey:@"loans"]; //2

    NSLog(@"loans: %@", latestLoans); //3

    // 1) Get the latest loan
    NSDictionary* loan = [latestLoans objectAtIndex:0];

    // 2) Get the funded amount and loan amount
    NSNumber* fundedAmount = [loan objectForKey:@"funded_amount"];
    NSNumber* loanAmount = [loan objectForKey:@"loan_amount"];
    float outstandingAmount = [loanAmount floatValue] - 
    [fundedAmount floatValue];

    // 3) Set the label appropriately
    humanReadble.text = [NSString stringWithFormat:@"Latest loan: % from %@ needs another $%.2f to pursue their entrepreneural dream",
                         [loan objectForKey:@"name"],
                         [(NSDictionary*)[loan objectForKey:@"location"] 
                          objectForKey:@"country"],
                         outstandingAmount];
}

@end

1 Ответ

0 голосов
/ 05 февраля 2012

Попробуйте это:

__block blockSelf = self;
dispatch_async(kBgQueue, ^{
    NSData* data = [NSData dataWithContentsOfURL: 
                    kLatestKivaLoansURL];
    dispatch_async(dispatch_get_main_queue(), ^{
            [blockSelf fetchedData:data];
        });

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