从Web服务器读取json以进行快速对话

时间:2012-11-08 15:03:01

标签: objective-c ios webserver quickdialog

我正在使用QuickDialog库,这太棒了! 到目前为止,我设置了一个json文件放入我的项目并显示它。 但是知道我想从网络服务中读取它。但该函数需要一个字符串。你可以在这里看到这个功能。

- (QRootElement *)initWithJSONFile:(NSString *)jsonPath {
    self = [self initWithJSONFile:jsonPath andData:nil];
    return self;
}

我的工作如下。

[sectionSamples addElement:[[QRootElement alloc] initWithJSONFile:@"loginform"]];
[sectionSamples addElement:[[QRootElement alloc] initWithJSONFile:[NSURL URLWithString:[NSString stringWithFormat:@"%@",@"http://192.168.0.102/testWeb/callback2.json"]]]];

就像你可以看到我的第一个元素只是加载一个json(loginform),它位于我项目的某个地方。但是当我想要加载第二个表单(callback2.json)时。它说 dataparameter是nil

当我浏览浏览器中的网址时,它正确显示它。

有人能帮助我吗?

亲切的问候。

2 个答案:

答案 0 :(得分:0)

QuickDialog目前不会执行您要执行的操作。 initWithJSONFile方法接受一个字符串作为本地文件的名称,或者带有数据的对象结构(应该遵循JSON格式,就像你自己在代码中读取文件一样.DataParameter需要在方法中传递,这可能只是一本空字典。

现在,您必须先自己下载文件,然后解析它并将其传递给该方法,而不仅仅是NSURL。

我一直在考虑直接将这个添加到项目中,但从经验来看,似乎每个应用程序都需要以不同的方式执行操作(例如,如果我们显示加载屏幕,是否应该显示消息,如果有错误,等等),所以直接在应用程序中使用它不会帮助很多人。

欢迎快速加入Google群组,让QuickDialog与他人讨论这个问题!

答案 1 :(得分:0)

好的,所以解决方法是重写函数initWithJsonFile,它将NSURL作为参数。

- (QRootElement *)initWithJSONURL:(NSURL *)jsonPath andData:(id)data{

    Class JSONSerialization = [QRootElement JSONParserClass];
    NSAssert(JSONSerialization != NULL, @"No JSON serializer available!");

    NSError *jsonParsingError = nil;
    //NSString *filePath = [[NSBundle mainBundle] pathForResource:jsonPath ofType:@"json"];
    NSDictionary *jsonRoot = [JSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:jsonPath] options:0 error:&jsonParsingError];

    self = [self initWithJSON:jsonRoot andData:data];
    return self;
}