Swift字符串被截断/无法容纳足够的内容
我正打算做一个使用wkwebview和 JavaScript的东西……因此在字符串方面遇到了严重的问题。
它们太短了,意思是容量不够。我知道字符串的容量很大,理论上可以把圣经塞进去之类的……然而我确实遇到了麻烦。首先,从postMessage收到的JSON回复被截断了,因此我不得不开始创建将JSON拆成若干部分的方法……并不理想,根本不理想……总之。
我的脚本在这里:
var script: String = ""
script += """
let json = JSON.parse(data);
if (json && json['cargo'] && json['cargo']['loads'] && Array.isArray(json['cargo']['loads']) && Object.keys(json['cargo']['loads']).length > 0 && json['cargo']['loads'][0]['id']) {
var obj = new Object();
obj.id = json['cargo']['loads'][0]['id'];
obj.ordererReference = json['cargo']['loads'][0]['ordererReference'];
obj.fromname = json['cargo']['loads'][0]['consignorName];
obj.fromstreet = json['cargo']['loads'][0]['consignorStreetAddr'];
obj.frompost = json['cargo']['loads'][0]['consignorPostCode'] + " " + json['cargo']['loads'][0]['consignorPostOffice'];
obj.fromphone = json['cargo']['loads'][0]['consignorPhone'];
obj.fromcoords = json['cargo']['loads'][0]['consignorCoordinateX'] + "," + json['cargo']['loads'][0]['consignorCoordinateY'];
obj.toname = json['cargo']['loads'][0]['consigneeName'];
obj.tostreet = json['cargo']['loads'][0]['consigneeStreetAddr'];
obj.topost = json['cargo']['loads'][0]['consigneePostCode'] + " " + json['cargo']['loads'][0]['consigneePostOffice'];
obj.tophone = json['cargo']['loads'][0]['consigneePhone'];
obj.tocoords = json['cargo']['loads'][0]['consigneeCoordinateX'] + " " + json['cargo']['loads'][0]['consigneeCoordinateY'];
obj.toemail = json['cargo']['loads'][0]['consigneeEmail'];
obj.organizer = json['cargo']['loads'][0]['responsiblePerson'];
obj.organizerPhone = json['cargo']['loads'][0]['responsiblePhone'];
obj.loadArrive = json['cargo']['loads'][0]['loadingPlaceArrival'];
obj.loadBegun = json['cargo']['loads'][0]['fetchTimeRealisationStart'];
obj.loadEnd = json['cargo']['loads'][0]['fetchTimeRealisation'];
obj.deliveryArrive = json['cargo']['loads'][0]['deliveryPlaceArrival'];
obj.deliveryBegun = json['cargo']['loads'][0]['deliveryTimeRealisationStart'];
obj.deliveryEnd = json['cargo']['loads'][0]['deliveryTimeRealisation'];
obj.waybill = json['cargo']['loads'][0]['waybillPdfUrl'];
obj.comments = json['cargo']['loads'][0]['comments'];
window.webkit.messageHandlers.openLoadDetails.postMessage(JSON.stringify(obj));
} else {
window.webkit.messageHandlers.requestError.postMessage("failed to get load details")
}
"""
而script字符串变量的内容是:
let json = JSON.parse(data);
if (json && json['cargo'] && json['cargo']['loads'] && Array.isArray(json['cargo']['loads']) && Object.keys(json['cargo']['loads']).length > 0 && json['cargo']['loads'][0]['id']) {
var obj = new Object();
obj.id = json['cargo']['loads'][0]['id'];
obj.ordererReference = json['cargo']['loads'][0]['ordererReference'];
obj.fromname = json['cargo']['loads'][0]['consignorName];
obj.fromstreet = json['cargo']['loads'][0]['consignorStreetAddr'];
obj.frompost = json['cargo']['loads'][0]['consignorPostCode'] + " " + json['cargo']['loads'][0]['consignorPostOffice'];
obj.fromphone = json['cargo']['loads'][0]['consignorPhone'];
obj.fromcoords = json['cargo']['loads'][0]['consignorCoordinateX'] + "," + json['cargo']['loads'][0]['consignorCoordinateY'];
obj.toname = json['cargo']['loads'][0]['consigneeName'];
obj.tostreet = json['cargo']['loads'][0]['consigneeStreetAddr'];
obj.topost = json
是的,截断就发生在这里。我起初以为会有一个“看不见”的字符导致的……但并非如此。然后我尝试在这之后再往字符串追加,结果仍然一样,我追加的第二段字符串……就“消失”了。
好吧,也许有一些我看不见的东西……于是我把内容全部清空。打开一个关于Swift的维基百科页面,从那里拷贝一段相当长的内容,粘贴进script变量中——只是为了看看是否会再次发生,结果那篇文章也被截断。
到底是怎么回事???怎么才能得到一条“很长的字符串”?是不是在某处的项目设置出了错,从而限制了字符串的最大长度?太让人沮丧了……
我试着搜索,但似乎这不是一个很常见的问题——或者是我用的关键词不对……
解决方案
这是一个JavaScript错误。出现在这一行:
obj.fromname = json['cargo']['loads'][0]['consignorName];
缺少一个引号。还有…… NSLog会截断输出。Print不会——这点值得知道。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。