-1

我有两个问题:

1.我想在我的应用中从json加载信息,现在'NSLog(@"Array: %@", self.news);' 没有显示任何东西,但如果我把它放在 '(void)connectionDidFinishLoading:(NSURLConnection *)connection' 中它可以工作,你能告诉我为什么吗?

//making request query string
NSString *requestUrl = [NSString
                         stringWithFormat:@"%@jsons/json.php?go=product_info&latitude=%g&longitude=%g&identifire=%@&pid=%ld&externalIPAddress=%@&localIPAddress=%@",
                         BASE_URL,
                         coordinate.latitude,
                         coordinate.longitude,
                         uniqueIdentifier,
                         (long)self.productId,
                         [self getIPAddress],
                         [self getLocalIPAddress]
                         ];



NSURL *url=[NSURL URLWithString:requestUrl];
NSURLRequest *request= [NSURLRequest requestWithURL:url];
NSURLConnection *c=[[NSURLConnection alloc] initWithRequest:request delegate:self];

NSLog(@"Array: %@", self.news);



}
//=========================
-(void)connection: (NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

self.jsonData= [[NSMutableData alloc] init];

}
-(void)connection: (NSURLConnection *)connection didReceiveData:(NSData *)theData{


[self.jsonData appendData:theData];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{


self.news=[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil];



}

-(void)connection: (NSURLConnection *)connection didFailWithError:(NSError *)error{

UIAlertView *errorView=[[UIAlertView alloc] initWithTitle:@"Error" message:@"download could not be compelete" delegate:nil cancelButtonTitle:@"Dissmiss" otherButtonTitles:nil, nil];
[errorView show];

}

2.对于这行代码“self.news=[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:零];'

self.news 是一个数组,我将其更改为字典,但我收到了相同的警告消息。

4

1 回答 1

1

它不起作用,因为当您NSLogself.news解析器上调用它时甚至还没有开始解析任何数据。any 的默认值ivarnil,这就是为什么你什么都得不到。

关于那个警告,这是因为NSJSONSerialization返回一个不透明的指针,即idCOCOA obj 所以你必须将它转换为news类型以防止编译器抱怨。

例如,假设你self.news是一个NSDictionary

self.news = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil];

编辑

在您的情况下,鉴于您的 JSON 响应数据的结构,您应该使用 aNSArray作为根对象,以便

 self.news = (NSArray *)[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil];
于 2013-07-04T16:47:39.097 回答