我正在通过解析谷歌天气api的示例iphone教程,api似乎不再存在所以我已经找到了另一种选择.本教程使用libxml2和xpath查询来解析xml文件.我成功地解析了大部分数据.我遇到的问题是天气符号的图标网址包含在CDATA部分中:
<weatherIconUrl><![CDATA[http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0010_heavy_rain_showers.png]]></weatherIconUrl>
Run Code Online (Sandbox Code Playgroud)
我知道xpath无法读取CDATA中包含的项目.无论如何从标签中提取这些数据?
我试图从数组中获取NSURL的路径值,以便在我的应用中设置图标.我得到了
NSInvalidArgumentException',原因:' - [__ NSArrayI length]:无法识别的选择器发送到实例0x5622590.
如果我使用nslog,我会得到预期的输出:
NSLog(@"%@",[[wforecast.wicons objectAtIndex:0]valueForKey:@"nodeContent"]);
Run Code Online (Sandbox Code Playgroud)
这给了我:

我将值设置如下
NSURL *urlpath;
NSString *urls = [[wforecast.wicons objectAtIndex:0] valueForKey:@"nodeContent"];
urlpath = [NSURL URLWithString:(NSString *)urls];
Run Code Online (Sandbox Code Playgroud)
我很欣赏这是一种漫长的做事方式,但我试图分解各个组件,以找出出了什么问题,但我不知所措!
我的应用程序提取了一个json数据源,我刚刚将可访问性检查添加到app delegate中的applicationDidBecomeActive.如果网络是可联系的,则加载视图控制器.从视图控制器中调用解析器类,该类填充UITableview.如果网络不可联系,则会显示警报.如果用户按下主页按钮,则激活无线或蜂窝数据,然后返回应用程序,视图控制器将被加载.虽然这有效但解决方案并不是特别优雅,因为每次用户在放入后台后返回应用程序时,视图控制器调用都会再次运行.我想知道是否有更好的选择?
AppDelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Check for network connectivity
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Connection Error" message:@"App cannot connect to the internet" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
self.internetActive = NO;
}
else {
NSLog(@"internet available");
self.internetActive = YES;
}
// if internet available call viewcontroller;
if (self.internetActive) {
navController.viewControllers = [NSArray arrayWithObject:viewController];
[window addSubview:navController.view];
[window makeKeyAndVisible];
}
else {
//error pic …Run Code Online (Sandbox Code Playgroud)