Подсчет 0 в числе - PullRequest
       24

Подсчет 0 в числе

0 голосов
/ 27 июля 2011

Я загружаю данные из твиттера, используя канал JSON, используя пример SBJSON Framework.После завершения загрузки я получаю число от 0 до 0. Нужно ли ждать, пока данные будут загружены, или мне не хватает инициализации массива в моем коде?

- (void)viewDidLoad {
[super viewDidLoad];


// Add the view controller's view to the window and display.
responseData = [[NSMutableData data] retain];
self.twitterArray = [NSMutableArray array];
NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:@"http://search.twitter.com/search.json?q=mobtuts&rpp=5"]];


[[NSURLConnection alloc] initWithRequest:request delegate:self];

[super viewWillAppear:animated];
}


 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
   }

 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
  }


 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];  
[responseData release];  

NSDictionary *results = [responseString JSONValue];  

self.twitterArray = [results objectForKey:@"results"]; 

    [self.tableView reloadData]; // Correct way

 }

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
NSLog(@"count : %d", [self.twitterArray count]); // Gets the count 0 here.
return [self.twitterArray count];
 }

1 Ответ

4 голосов
/ 27 июля 2011

NSURLConnection является асинхронным, если вы не используете +sendSynchronousRequest:returningResponse:error:.Вам нужно позвонить по номеру [self.tableView reloadData], когда загрузка завершится, и у вас будет twitterArray, установленный для ваших результатов.Это заставит tableView перечитать все его методы источника данных / делегата.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  [connection release];

  NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];  
  [responseData release];  

  NSDictionary *results = [responseString JSONValue];  

  self.twitterArray = [results objectForKey:@"results"]; 

  [self.tableView reloadData]; // <-- add this here
}
...