まず第一に、私の英語が下手で申し訳ありませんが、私はフランス人であり、理解できるように最善を尽くします.
だから、私はこの構造を持つ単純なアプリケーションをコーディングしています:
私がやろうとしているのは、viewController の ws_product で JSON を解析した後に取得した製品配列を返すことです。これにより、tableView を埋めることができ、アプリケーションが空ではなくなります。
私の実際の ws_product は次のとおりです。
#import "WS_Produit.h"
#import "Produit.h"
#import "ViewController.h"
@implementation WS_Produit
- (NSMutableArray *)getProduitsJSON
{
__block NSMutableArray *result;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^() {
NSLog(@"on passe en async");
NSError *error = nil;
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"the url to load"]];
NSDictionary *produits = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if( error )
{
NSLog(@"%@", [error localizedDescription]);
}
else {
dispatch_sync(dispatch_get_main_queue(), ^(){
NSLog(@"retour en sync");
result = [[NSMutableArray alloc] init];
Produit *tmp;
NSArray *produit = produits[@"produits"];
for ( NSDictionary *property in produit )
{
tmp = [Produit new];
tmp.ref = property[@"ref"];
tmp.name = property[@"name"];
tmp.description = property[@"description"];
tmp.price = property[@"price"];
tmp.imgURL = property[@"imgURL"];
[result addObject:tmp];
NSLog(@"%@", result);
}
});
}
});
NSLog(@"sortie du block");
NSLog(@"%@", result);
return result;
}
@end
私の問題は、私がdispatch_queueの外にいるときです。私の結果の配列は空なので、viewControllerクラスでそれを返すのは無意味です。