Данные не будут загружаться после разбора XML
Я новичок в iOS и пытаюсь реализовать синтаксический анализ XML. Я использую собственный класс (XMLParser) для разбора XML, предоставленный Габриэлем Теодоропулосом. Я пытаюсь загрузить и сохранить данные при запуске приложения.
Данные также анализируются и сохраняются, но представление, что я пытаюсь загрузить сохраненный файл, загружается раньше, поэтому данные не отображаются. Но когда я снова выдвигаю представление, данные видны.
Из того, что я заметил, завершение метода класса XMLParser в AppDelegate происходит после загрузки представления. Разбор и загрузка представления происходит правильно, когда я нажимаю кнопку обновления, чтобы выполнить то же действие.
Вы можете помочь?
Вот как далеко я зашел:
AppDelegate.m
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self initialNewsFetch];
return YES;
}
-(void) initialNewsFetch
{
//1. Main view|Home:- Most Read
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
RootViewController * mostRead = [storyboard instantiateViewControllerWithIdentifier:@"RootViewController"];
[mostRead refreshData];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ArtsNewsAvailable" object:nil];
}
@end
ViewController.m
-(void)refreshData{
XMLParser *xmlParser = [[XMLParser alloc] initWithXMLURLString:MostReadNewsFeed];
[xmlParser startParsingWithCompletionHandler:^(BOOL success, NSArray *dataArray, NSError *error) {
if (success) {
[self performNewFetchedDataActionsWithDataArray:dataArray];
}
else{
NSLog(@"%@", [error localizedDescription]);
}
}];
}
-(void)performNewFetchedDataActionsWithDataArray:(NSArray *)dataArray{
// 1. Initialize the arrNewsData array with the parsed data array.
if (self.arrNewsData != nil) {
self.arrNewsData = nil;
}
self.arrNewsData = [[NSArray alloc] initWithArray:dataArray];
// 2. Write the file and reload the view.
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * docDirectory = [paths objectAtIndex:0];
NSString * newsFilePath = [NSString stringWithFormat:@"%@",[docDirectory stringByAppendingPathComponent:@"mostRead"]]; // NewsFile
if (![self.arrNewsData writeToFile:newsFilePath atomically:YES]) {
_newsAvailable = NO;
NSLog(@"Couldn't save data.");
}
else
{
_newsAvailable = YES;
[self viewDidLoad]; //even tried calling this//
}
}