Использование многопоточности для загрузки данных JSON - PullRequest
0 голосов
/ 27 февраля 2012

Я хочу загрузить данные 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.

Ответы [ 4 ]

1 голос
/ 27 февраля 2012

вы всегда можете создать делегата и позволить этому делегату перезвонить после завершения, либо использовать соединение завершил загрузку метода делегата NSURLConnection для обработки ответа в Твиттере.Или лучше всего использовать ASIHTTPRequest или AFNetwork framework, чтобы сделать запрос асинхронным, а затем выполнить JSON синтаксический анализ

1 голос
/ 27 февраля 2012

Вы можете использовать NSURLConnection с методом:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
0 голосов
/ 28 февраля 2012

я использовал:

#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];
    });
}
0 голосов
/ 27 февраля 2012

Вот мой самый популярный ответ недели.Посмотрите на документы Apple.https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i

Ответ прямо там.

Кто-нибудь на самом деле читал документацию, прежде чем перейти к переполнению стека?

...