2012-02-04 227 views
1

我發現這個代碼(類似,不得不調整它)關於如何從服務器獲取數據,但由於某種原因它不能運行。它停在:「dispatch_async(kBgQueue, ^{」,(第10行)。請幫忙,我對iOS編程非常陌生。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

它會拋出一個錯誤?它過早終止了嗎?它掛在什麼地方?我認爲我們需要更多信息。 – 2012-02-04 22:31:08

回答

0

這對您有幫助嗎?

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

}); 
+0

請參閱我的編輯。第一個版本是錯誤的。 – vikingosegundo 2012-02-04 22:59:29

+0

肯定更清潔。我可以建議一個更類似於'selfForBlock'或'blockSafeSelf'的描述性變量名嗎? – 2012-02-05 00:15:44