Функции в JSONDownload.mNSURLConnection не скачивая
-(void)downloadEntries{
NSString *urlString = @"https://itunes.apple.com/in/rss/topmovies/limit=50/genre=4431/json";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[self.webData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(nonnull NSData *)data{
[self.webData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSError *error;
self.dictionary = [NSJSONSerialization JSONObjectWithData:self.webData options:0 error:&error];
NSLog(@"%@", [error localizedDescription]);
}
-(NSString *)returnName: (NSInteger)index{
NSArray *entry = [self entryArray];
NSDictionary *indexDictionary = [entry objectAtIndex:index];
NSDictionary *nameDictionary = [indexDictionary objectForKey:@"im:name"];
NSString *nameOfMovie = [nameDictionary objectForKey:@"label"];
return nameOfMovie;
}
-(NSInteger)numberOfEntries{
NSDictionary *feed = [self dictionary];
NSArray *entry = [feed objectForKey:@"entry"];
return [entry count];
}
который вызывается другим классом FeedEntry.m
- (void)recieveEntries{
JSONDownload *download = [JSONDownload sharedInstance];
[download downloadEntries]; // calling method
NSInteger numberOfEntries = [download numberOfEntries]; //calling method
for (int index = 0; index < numberOfEntries; index++) {
self.name = [download returnName:index]; //calling method
NSLog(@"%@",self.name);
}
}
Однако по отслеживанию я обнаружил, что connectionDidFinishLoading: не вызывается и, следовательно, словарь Свойство в этом fucntion не инициализируется. Таким образом, я получаю numberOfEntries как 0, и цикл не выполняется. То, что должно быть сделано?
Вы реализовали другие (необходимые) методы делегирования 'didReceiveResponse' и' didReceiveData'? В любом случае вызов 'numberOfEntries' после' downloadEntries' всегда будет возвращать 0 из-за асинхронного поведения соединения. – vadian
@vadian yes У меня есть – Rishab
Вам нужен обработчик завершения или метод делегата, который вызывается в методе 'connectionDidFinishLoading', чтобы сообщить' FeedEntry', что данные доступны. – vadian