我有两个问题:
1.我想在我的应用程序中加载来自json的信息,现在是'NSLog(@“Array:%@”,self.news);'没有显示任何东西,但如果我把它放在'(void)connectionDidFinishLoading:(NSURLConnection *)连接'它有效,你能告诉我为什么吗?
//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选项:我始终警告'不兼容指向整数转换的指针'* void'到'NSJSONreading ...'类型的参数'零错误:nil];'
self.news是一个数组我把它改成了字典,但是我有相同的警告信息。
答案 0 :(得分:1)
它不起作用,因为当您在NSLog
上调用self.news
时,解析器甚至还没有开始解析任何数据。任何ivar
的默认值都是nil
,这就是为什么你什么也得不到。
关于该警告,是因为NSJSONSerialization
向COCOA obj返回一个不透明指针,即id
,因此您必须将其转换为news
类型防止编译器抱怨。
例如,假设您的self.news
为NSDictionary
self.news = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil];
修改强>
在您的情况下,给定JSON响应数据的结构,您应该使用NSArray
作为根对象,所以
self.news = (NSArray *)[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil];