2012-02-04 175 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