NSDictionary在IOS/ Objective c中显示nil



我正在通过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];
                }
             }
         }
     }
}

注意:上面的代码没有经过测试,可能一开始不工作,但应该是这样的

我希望这对你有帮助。

欢呼。

最新更新