2013-07-29 2 views
0

Я делаю два отдельных запроса на получение JSON из внешних источников, я до сих пор реализовал отображение данных с первого запроса в моем представлении таблицы. Моя проблема заключается в том, что мне нужно объединить оба набора данных в одно табличное представление и отсортировать данные с помощью общего ключа, который в этом случае будет создан_time. Я понимаю, что могу использовать некоторую форму массива, но как мне это сделать?Несколько источников данных в одном представлении таблицы

Первое:

NSURL *url = [NSURL URLWithString:myURL]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) { 
             self.results = [json valueForKeyPath:@"data"]; 
             [self.tableView reloadData]; 
            } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
            }]; 

[operation start]; 

Второе:

NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/search/tweets.json"]; 
      NSDictionary *parameters = @{@"count" : RESULTS_PERPAGE, 
              @"q" : encodedQuery}; 

      SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter 
                requestMethod:SLRequestMethodGET 
                   URL:url 
                 parameters:parameters]; 

      NSArray *accounts = [self.accountStore accountsWithAccountType:accountType]; 
      slRequest.account = [accounts lastObject];    
      NSURLRequest *request = [slRequest preparedURLRequest]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
       [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
      }); 

ответ

0

Чтобы объединить данные из внешних источников, вы хотите сделать следующее для каждого ответа вы получите обратно.

Кроме того, для примера, я предполагаю, что объекты, с которыми вы будете иметь дело, - это все словари. Если это не так, вам нужно добавить некоторую логику в блок сравнения, чтобы получить значение created_time в зависимости от типа объекта.

NSArray *data = [json valueForKeyPath: @"data"];  // This is the data from your first example. You'll have to do the same for your second example. 

NSMutableArray *allResults = [NSMutableArray arrayWithArray: self.results]; 
[allResults addObjectsFromArray: data]; 
[allResults sortUsingComparator: ^NSComparisonResult(id obj1, id obj2) { 

    NSDictionary *dict1 = obj1; 
    NSDictionary *dict2 = obj2; 

    return [[dict1 objectForKey: @"created_time"] compare: [dict2 objectForKey: @"created_time"]]; 
}]; 

[self setResults: allResults]; 
[self.tableView reloadData]; 
+0

Примечание вы можете просто сделать '[allResults sortUsingComparator:^NSComparisonResult (NSDictionary * dict1, NSDictionary * dict2) {'. Кроме того, вы должны обязательно выполнить проверку, которую рекомендует Джейсон (что это, по сути, NSDictionary). В противном случае, если ваш API отправит неверный ответ, он может привести к сбою вашего приложения. –

Смежные вопросы