2015-08-26 37 views
1

我正在通過Web服務接收阿拉伯數據。我將數據作爲JSON對象獲得,但是當我將值傳遞給NSDictionary時,它顯示nil並且無法獲得key/pair value.i接收值直到data,但我無法將其傳遞給NSDictionaryNSDictionary在IOS中顯示爲零/目標c

下面是代碼:

(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]; 

       }}}} 
+0

您從服務器接收到的JSON值是否可能不是字典或可能包含使其成爲無效JSON字符串的其他字符?你還可以請包括從服務器收到的JSON字符串? –

+0

@Chonch我檢查字符串使用jsonlint.com/ ..它說這是驗證JSON..thnx – jithin

回答

2

您需要使用適當的編碼數據,通常阿拉伯文內容需要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]; 

       } 
      } 
     } 
    } 
} 

注意:上面的代碼沒有經過測試,可能一開始不工作,但應該是這樣。

我希望它有幫助。

乾杯。

+0

thanx,這項工作完美 – jithin

+0

我可以使用相同的代碼爲英語嗎?或者我需要更改'編碼:NSISOLatin1StringEncoding]中的同步'',我的應用程序也需要英語和阿拉伯語 – jithin

+0

@jithinvarghese如果數據是兩者的混合,請使用ISO,否則您不需要該轉換就可以直接使用它。 – iphonic

相關問題