我的iOS应用程序突然出现了一个非常奇怪的问题。 我用来从服务器接收Jsons,然后从中提取一些信息。除了一个用户帐户外,一切都运行良好:我只获得属性的第一个字符。
例如,如果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)
需要代码。 [有代码!感谢]
但是,你可以做的事情:
尝试在发生的行上设置断点,并检查变量以查看是否所有内容都已存在。
你是如何解码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在本地进行了测试,我得到了#34; Joey&#34;正常。
编辑2: 在你奇怪的长度结果后,我肯定会检查服务器的响应。问题似乎不在你的Objective-C代码上。
答案 1 :(得分:0)
尝试在stringValue
:
[response objectForKey:@"name"]
[[response objectForKey:@"name"] stringValue]