2015-04-07 23 views
1

我的iOS应用程序突然出现一个非常奇怪的问题。 我用来从服务器接收Jsons,并从中提取一些信息。除了一个用户帐户之外,一切工作都很完美:我只获得属性的第一个字符。只有从Json中提取的第一个字母

例如,如果JSON是这样的:

{ 
    name : "Joey" 
} 

我解压的name属性,我得到的字符串 “J”。 我必须确切地说,它可以与所有其他用户帐户完美协同工作。

我在想一个编码问题?

预先感谢您的回答。

编辑:

这是我如何得到服务器的响应:

+ (void)getDataFromServ:(NSString *)urlServ withCompletionHandler:(void (^)(NSDictionary *dataDic))completion { 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlServ]]; 
    [request setHTTPMethod:@"GET"]; 

    NSURLSession *session = [NSURLSession sharedSession]; 
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { 
     if (error) { 
      return; 
     } 

     NSDictionary *serDataDic = nil; 
     NSError* parseError; 
     if (data) { 

      serDataDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError]; 
      completion(serDataDic); 
     } 
    }]; 

    [task resume]; 
} 

这里是我如何处理响应:

... 

[self getDataFromServ:urlServ withCompletionHandler:^(NSDictionary *dataDic) { 

     NSDictionary *response = [dataDic objectForKey:@"data"]; 

     NSLog(@"Response : %@", response); 
     NSLog (@"Name : %@", [response objectForKey:@"name"]); 

... 
} 

下面是相关的日志:

Response : 
{ 
    name = "Joey"; 
} 

Name : J 

编辑2:

另一件我刚才注意到的,当我提取一个属性并计算其长度时,长度比属性长。 例如,当我有一个包含15个字符的属性时,计算的长度为29,但属性仍然只出现一个字符。

编辑3:

我测试别的东西:

for (NSInteger j = 0; j < displayNameStr.length; j++) { 

          NSLog(@"displayname : %@, j : %d", [nameExtracted substringFromIndex:j], j);       
} 


2015-04-07 11:25:34.778 myApp[434:131660] displayname : A 
2015-04-07 11:25:34.778 myApp[434:131660] displayname : 
2015-04-07 11:25:34.779 myApp[434:131660] displayname : l 
2015-04-07 11:25:34.779 myApp[434:131660] displayname : 
2015-04-07 11:25:34.779 myApp[434:131660] displayname : l 
2015-04-07 11:25:34.780 myApp[434:131660] displayname : 
2015-04-07 11:25:34.780 myApp[434:131660] displayname : a 
2015-04-07 11:25:34.781 myApp[434:131660] displayname : 
2015-04-07 11:25:34.781 myApp[434:131660] displayname : i 
2015-04-07 11:25:34.781 myApp[434:131660] displayname : 
2015-04-07 11:25:34.782 myApp[434:131660] displayname : n 
2015-04-07 11:25:34.782 myApp[434:131660] displayname : 
2015-04-07 11:25:34.783 myApp[434:131660] displayname : o 
2015-04-07 11:25:34.784 myApp[434:131660] displayname : 
2015-04-07 11:25:34.784 myApp[434:131660] displayname : u 
2015-04-07 11:25:34.788 myApp[434:131660] displayname : 
2015-04-07 11:25:34.788 myApp[434:131660] displayname : D 
2015-04-07 11:25:34.789 myApp[434:131660] displayname : D 
2015-04-07 11:25:34.789 myApp[434:131660] displayname : 
2015-04-07 11:25:34.789 myApp[434:131660] displayname : u 
2015-04-07 11:25:34.790 myApp[434:131660] displayname : 
2015-04-07 11:25:34.790 myApp[434:131660] displayname : p 
2015-04-07 11:25:34.790 myApp[434:131660] displayname : 
2015-04-07 11:25:34.791 myApp[434:131660] displayname : r 
2015-04-07 11:25:34.791 myApp[434:131660] displayname : 
2015-04-07 11:25:34.792 myApp[434:131660] displayname : a 
2015-04-07 11:25:34.792 myApp[434:131660] displayname : 
2015-04-07 11:25:34.792 myApp[434:131660] displayname : - 
2015-04-07 11:25:34.793 myApp[434:131660] displayname : 
2015-04-07 11:25:34.793 myApp[434:131660] displayname : B 
2015-04-07 11:25:34.794 myApp[434:131660] displayname : 
2015-04-07 11:25:34.794 myApp[434:131660] displayname : e 
2015-04-07 11:25:34.794 myApp[434:131660] displayname : 
2015-04-07 11:25:34.795 myApp[434:131660] displayname : l 
2015-04-07 11:25:34.795 myApp[434:131660] displayname : 
2015-04-07 11:25:34.795 myApp[434:131660] displayname : l 
2015-04-07 11:25:34.796 myApp[434:131660] displayname : 
2015-04-07 11:25:34.796 myApp[434:131660] displayname : a 
2015-04-07 11:25:34.798 myApp[434:131660] displayname : 
2015-04-07 11:25:34.798 myApp[434:131660] displayname : n 
2015-04-07 11:25:34.798 myApp[434:131660] displayname : 

名称的属性是:Allainou Dupra-bellan

+0

你能表现出一定的代码,好吗?你如何初始化字符串? –

+0

这是不可能为我们提出一个解决方案,如果你不包括一些_real_代码/数据在你的问题 – Alladinian

+0

无论乔伊编码的不同,或者一些治疗情况有关具有“somethign”不同的特定用户。但是除非你告诉我们从头到尾看起来如何,否则我们无法真正提供帮助。 :) –

回答

0

代码所需。 [编码!谢谢]

但是,事情可以做:

  • 尝试把一个断点在它发生的线,并检查变量,看看是否一切都在那里。

  • 你如何解码JSON?试着看看你是不是以一种你不应该得到的方式得到这些琴弦。

  • 使用HTTP(S)代理应用程序来查看来自服务器(Fiddler,Charles Proxy,Wireshark)的数据。

编辑: 一切似乎是罚款...怪异的结果。但是,由于不遵守规范会导致怪异的结果,请尝试:

替换:

serDataDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError]; 

有了:

serDataDic = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&parseError]; 

我不认为这是问题的根源,但值得一试。

另外,你可以给我们从服务器得到的整个JSON字符串吗?我使用你给的JSON在本地测试了它,我正确地得到了“Joey”。

编辑2: 在你奇怪的长度结果后,我肯定会检查服务器的响应。该问题似乎不在您的Objective-C代码上。

+0

这更多评论材料比答案材料古斯塔沃:) –

+0

我想你的第一个忠告,它没有工作,我就谈谈我的服务管理员:)。谢谢你的回答! – Randy

+0

不要写这一行:的NSDictionary *响应= [dataDic objectForKey:@ “数据”]; –

0

试着在你[response objectForKey:@"name"]的末尾添加一个stringValue

[[response objectForKey:@"name"] stringValue]

相关问题