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

エラーが発生しますか?それは時期尚早に終了するか?どこかにぶら下がっていますか?もっと情報が必要だと思う。 –

答えて

0

これは役に立ちますか?

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

}); 
+0

私の編集をご覧ください。最初のバージョンは間違っていた。 – vikingosegundo

+0

必ず掃除機をご使用ください。私は 'selfForBlock'や' blockSafeSelf'のようなもっと記述的な変数名を示唆していますか? –

関連する問題