我正在通过web服务接收阿拉伯语数据。我得到数据作为一个JSON对象,但是当我把值传递给NSDictionary
时,它显示nil
,不能得到key/pair
值。我接收值直到data
,但我不能传递给NSDictionary
。
代码如下:
(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
for (NSString *key in [json allKeys])
{
NSArray *feed = [json objectForKey:key];
for(int i=0; i<feed.count;i++)
{
for (NSString *key1 in [[feed objectAtIndex:i] allKeys])
{
if([key1 isEqualToString:@"newsTitle"])
{
NSString *value = [[feed objectAtIndex:i] objectForKey:key1];
[NewsTitleArray addObject:value];
}
else if([key1 isEqualToString:@"newsDescription"])
{
NSString *value = [[feed objectAtIndex:i] objectForKey:key1];
[NewsDescriptionArray addObject:value];
}}}}
您需要为您的数据使用适当的编码,通常阿拉伯语内容需要ISO-Latin
编码。虽然你的代码是错误的,你需要使用正确的NSURLConnection委托函数来获得完整的数据,你正在试图解析不完整的数据
查看下面的更改
声明变量NSMutableData *receivedData;
处理委托调用
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//This delegate function gets called multiple times while fetching the data..
if(!receivedData){
receivedData=[[NSMutableData alloc] initWithData:data];
}else{
[receivedData appendData:data];
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
//When the connection completes the processing, do you parsing
if(receivedData.length>0){
NSString *string = [[NSString alloc] initWithData:receivedData encoding:NSISOLatin1StringEncoding];
NSData *utf8Data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:utf8Data options:kNilOptions error:nil];
for (NSString *key in [json allKeys])
{
NSArray *feed = [json objectForKey:key];
for(int i=0; i<feed.count;i++)
{
for (NSString *key1 in [[feed objectAtIndex:i] allKeys])
{
if([key1 isEqualToString:@"newsTitle"])
{
NSString *value = [[feed objectAtIndex:i] objectForKey:key1];
[NewsTitleArray addObject:value];
}
else if([key1 isEqualToString:@"newsDescription"])
{
NSString *value = [[feed objectAtIndex:i] objectForKey:key1];
[NewsDescriptionArray addObject:value];
}
}
}
}
}
注意:上面的代码没有经过测试,可能一开始不工作,但应该是这样的
我希望这对你有帮助。
欢呼。