Я хочу загрузить данные JSON с помощью многопоточности и проанализировать их в NSDictionary, ранее это делалось с использованием класса TWRequest для каналов Twitter. Как я могу использовать NSURLRequest для того же:
TWRequest *request = [[TWRequest alloc] initWithURL:[NSURL URLWithString: @"https://api.twitter.com/1/statuses/public_timeline.json?screen_name=firdous_ali86&include_entities=true"] parameters:nil requestMethod:TWRequestMethodGET]; // Notice this is a block, it is the handler to process the response [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { if ([urlResponse statusCode] == 200) { tweetCollection = [[NSMutableArray alloc] init]; Tweet *tweet; NSError *error; NSArray *dict = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error]; } }];
что NSURLRequest не реализует метод executeRequestWithHandler.
вы всегда можете создать делегата и позволить этому делегату перезвонить после завершения, либо использовать соединение завершил загрузку метода делегата NSURLConnection для обработки ответа в Твиттере.Или лучше всего использовать ASIHTTPRequest или AFNetwork framework, чтобы сделать запрос асинхронным, а затем выполнить JSON синтаксический анализ
NSURLConnection
ASIHTTPRequest
AFNetwork
JSON
Вы можете использовать NSURLConnection с методом:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
я использовал:
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1 #define kLatestKivaLoansURL [NSURL URLWithString: @"http://my_service_url"] //2 - (void)viewDidLoad { myCollection = [[NSMutableArray alloc] init]; [super viewDidLoad]; dispatch_async(kBgQueue, ^{ NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL]; NSError* error; NSDictionary* jsonDict = [NSJSONSerialization JSONObjectWithData:data //1 options:kNilOptions error:&error]; NSArray* myArray = [jsonDict objectForKey:@"response"]; //2 NSEnumerator *myIterator = [myArray objectEnumerator]; id anObject; Cast *cast; while( anObject = [myIterator nextObject]) { cast = [[Cast alloc] init]; cast.castTitle = [anObject objectForKey:@"castTitle"]; [myCollection addObject:cast]; } [myTableView reloadData]; }); }
Вот мой самый популярный ответ недели.Посмотрите на документы Apple.https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i
Ответ прямо там.
Кто-нибудь на самом деле читал документацию, прежде чем перейти к переполнению стека?