XML 解析后不会加载数据

Data won't load after XML parsing

提问人:Prashant 提问时间:6/8/2017 最后编辑:Prashant 更新时间:6/8/2017 访问量:48

问:

我是iOS的新手,我一直在尝试实现XML解析。 我正在使用Gabriel Theodoropoulos提供的自定义类(XMLParser)进行XML解析。 我正在尝试在应用程序启动时加载和保存数据。

数据也会被解析和保存,但是我尝试加载保存的文件的视图在加载之前加载,因此不会显示数据。但是,当我再次将视图推入视图时,数据是可见的。

根据我的观察,AppDelegate 中 XMLParser 类方法的完成是在加载视图之后完成的。 当我单击刷新按钮执行相同的操作时,解析和视图加载会正确发生。

你能帮忙吗?

以下是我走了多远:

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//
}
}
iOS Objective-C XML 解析 NSXMLSasParsRdelegate

评论

0赞 Sagar V 6/8/2017
代码块仅用于代码,而不用于文件名``
0赞 Prashant 6/8/2017
感谢您的更新。
0赞 Manfred Scheiner 6/8/2017
1.您能否检查completionHandler是否在主线程上执行?
0赞 Manfred Scheiner 6/8/2017
2. 您不应该自己调用 viewDidLoad。而是在 self.view 上调用 layoutIfNeeded
0赞 Prashant 6/9/2017
@ManfredScheiner会这样做。感谢您的回复。

答: 暂无答案