Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSData转换为NSString-NSLog限制_Ios_Objective C_Json_Curl_Zendesk - Fatal编程技术网

Ios 将NSData转换为NSString-NSLog限制

Ios 将NSData转换为NSString-NSLog限制,ios,objective-c,json,curl,zendesk,Ios,Objective C,Json,Curl,Zendesk,我试图在Zendesk中将NSData转换为NSString,但得到的字符串不完整,或者至少无法完全解码数据 当Icurl执行以下命令时: curl https://mySubdomain.zendesk.com/api/v2/users/1038194884/tickets/requested.json -v -u myLogin:myPassword 我得到了正确的响应,它列出了该用户的所有票证,响应如下:

我试图在Zendesk中将
NSData
转换为
NSString
,但得到的字符串不完整,或者至少无法完全解码
数据

当I
curl
执行以下命令时:

curl https://mySubdomain.zendesk.com/api/v2/users/1038194884/tickets/requested.json   -v -u myLogin:myPassword
我得到了正确的响应,它列出了该用户的所有票证,响应如下:

当我尝试在
objective-C
中从
iOS
应用程序中访问相同的内容时,响应基本相同,如下所示:

“缓存控制”=“必须重新验证,私有,最大使用期限=0”; 连接=“保持活动”; “内容编码”=gzip; “内容类型”=“应用程序/json;字符集=UTF-8”; 日期=“2017年1月28日星期六20:36:38 GMT”; Etag=“\”98b10cfcb2f1577122a1662926f9565c\”; 服务器=nginx; “严格的交通安全”=“最大年龄=31536000;”; “传输编码”=标识; “X-Content-Type-Options”=nosniff; “X-Frame-Options”=SAMEORIGIN; “X-Rack-Cache”=未命中; “X比率限制”=400; “X-利率限制-剩余”=399; “X-Request-Id”=“53c1b462-2dec-4c46-cc60-ECF4BD76E89”; “X-Runtime”=“0.209525”; “X-UA-Compatible”=“IE=Edge,chrome=1”; “X-Zendesk-API-Version”=v2; “X-Zendesk-Application-Version”=“v8.28”; “X-Zendesk-Origin-Server”=“app4.pod7.fra1.zdsys.com”; “X-Zendesk-Request-Id”=675ae5b4ff78fbe7

问题是,如果我试图将
数据
转换为
字典
NSString
,我会得到不完整的
字符串
。这是我正在使用的代码:

NSString *urlUser = [NSString stringWithFormat:@"https://mySubdomain.zendesk.com/api/v2/users/1038194884/tickets/requested.json"];
    NSURL *url  = [[NSURL alloc] initWithString:urlUser];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    [request addValue : @"application/json"
   forHTTPHeaderField : @"Content-Type" ];

    NSString *authStr = @"username:password";
    NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
    NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]];
    [request setValue:authValue forHTTPHeaderField:@"Authorization"];

    NSURLSession *session = [NSURLSession  sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                            completionHandler:
                                  ^(NSData *data, NSURLResponse *response, NSError *error) {
                                      NSLog(@"finished");
                                      if (!error)
                                      {

                                          NSLog(@"%@", data);
                                          NSLog(@"RESPONSE: %@", response);

                                          NSLog(@"length: %lu", data.length);

                                          //Determine if string is null-terminated
                                          char lastByte;
                                          [data getBytes:&lastByte range:NSMakeRange([data length]-1, 1)];

                                          NSString *str;

                                          if (lastByte == 0x0) {
                                              //string is null-terminated
                                              str = [NSString stringWithUTF8String:[data bytes]];
                                          } else {
                                              //string is not null-terminated
                                              str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                          }

                                          NSLog(@"string length: %lu", str.length);

                                          NSLog(@"%@", str);

                                          NSLog(@"stop");




                                      }

                                  }];
    [task resume];
顺便说一句,
data
长度与
curl
响应中的长度相同

记录的字符串:

{“tickets”:[{“url”:“,”id“:407,“external_id”:null”,via:{“channel”:“mobile_sdk”,“source”:{“from”:{},“to”:{},“rel”:“mobile_sdk”},”,创建于“:”2017-01-26T10:48:28Z”,“更新于“:”2017-01-26T11:05:42Z”,“type”:null,“subject”:“Comentário sobre exercício.,“原始主题”:“Comentário sobre” “实践”,描述:“Nome do usuário:bruna villete\n目标: qHQzNbjUzy\n巴西:铁的训练\n\n巴西的训练: \nTitulo:CADEIRA伸肌\n目标:qvq5deXxD9\n目标:MULHER 伊尼西亚特\nFrequencia:5\nPeríodo:Semana1\nérie:Serie B\n\n协议: \nbom,“优先级”:null,“状态”:“已解决”,“收件人”:null,“请求者id”:1038194884,“提交者id”:1038194884,“受让人id”:3030446965,“组织id”:null,“组id”:24989965,“合作者id”:[],“论坛主题id”:null,“问题id”:null,“有事件”:false,“是公共的”:true,“到期日”:null,“标记”:[“序列重要性”],“自定义字段”:[],“满意度评分”:空,“共享协议”_

然后像往常一样从字典中访问NSString(或JSON响应中的任何其他值/键)


正如我在评论中告诉你的那样,
NSLog
语句似乎切断了字符串。一切正常

要处理数据,请将其转换为json对象,并按如下方式使用:

// convert the response data to json
NSError *error = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (!error) {
    NSLog(@"json parsing succeeded.");
}

// access your data
NSArray *tickets = json[@"tickets"];

确切的意思是不完整的字符串?这意味着它停止在第一张票的中间……这个特定的用户有几个票,如图所示,在卷曲中返回。请参阅String的编辑问题。谢谢。不要使用<代码> NSCORL> < />代码>您可以临时添加一个<代码> UITExtVIEW <代码>到您的视图中,并设置其<代码>文本< /代码>rty到您的字符串…您也可以尝试这样记录:
printf(“%s”,str.UTF8String)
-这样输出就不会被切断。@Jorge最新Xcode在NSLog和字典方面有一些问题。已经提到并询问了几个线程。检查这里:,对于NSData部分,我回答了如何解决您的问题,您需要将响应序列化到字典中。如果答案解决了您的问题,请接受它为正确:)gl这与我的答案有什么不同?它包括json解析。由于我在上面的评论中回答了线程的问题,我创建了一个答案(正如@Jorge要求我的那样)。您的评论是关于NSLog部分的,您的答案中的序列化解决方案是我的答案的副本。并且您不需要每次都使用textview来运行NSLog,您可以迭代每个键,并在控制台中注销这些值。不过,我不会对您的答案投反对票,但下次不要复制o其他人在已经回答的时候回答。好吧……如果你觉得我复制了你的答案,请随意否决它。该线程是关于“获取不完整的字符串”这正是我在评论中所解释的——因此这就是答案!json和数据访问部分只是一个额外的部分。我退出:)我的答案是在你的答案发布前10分钟发布的。这不是一种感觉,这是事实。你的“评论”只是关于NSLog,你建议用户每次想从字典中记录文本时都创建UITextView。非常棒的提示。但是,你在这里的回答是我的一份副本,在你的评论中没有提及。
// convert the response data to json
NSError *error = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (!error) {
    NSLog(@"json parsing succeeded.");
}

// access your data
NSArray *tickets = json[@"tickets"];