По какой-то причине это работает на эмуляторе, работающем под управлением iOS 6+, но не на реальном iPad с iOS 5+. Когда я запускаю это приложение на iPad, он дает мне эту ошибку (и другие).Проблемы с iOS JSON на самом устройстве
Error parsing JSON: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Badly formed object around character 316.) UserInfo=0x650260 {NSDebugDescription=Badly formed object around character 316.}
JSON used is this (which is passed from Javascript): {"functionname":"setItem","args":{"key":"http://localhost:3000/assets/tasks/task.js","value":"function Task(){this.steps=new Array,this.completed=!1,this.loaded=!1,this.stepCount=-1,this.points=0,this.newpoints=0,this.prevpoints=0,this.circleGesture=!1,this.customGesture=!1,this.subtaskCounter=0,this.className=/"/"}(goes on for a while since it is a js script)"}}
Код для преобразования JSON строку JSON в прошивкой
if ([[urlStr lowercaseString] hasPrefix:protocolPrefix])
{
//strip protocol from the URL. We will get input to call a native method
urlStr = [urlStr substringFromIndex:protocolPrefix.length];
//Decode the url string
urlStr = [urlStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSError *jsonError;
//parse JSON input in the URL
NSDictionary *callInfo = [NSJSONSerialization
JSONObjectWithData:[urlStr dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&jsonError];
//check if there was error in parsing JSON input
if (jsonError != nil)
{
NSLog(@"Error parsing JSON: %@",[jsonError debugDescription]);
NSLog(@"%@", urlStr);
return NO;
}
....
}
CoffeeScript
callNativeFunction: (func, args, callback)->
if global_phone_os == 'ios'
url = "js2native://"
callInfo = {}
callInfo.functionname = func
if args?
callInfo.args = args
if callback?
cid = Math.random().toString(36).substr(2,10)
@callback[cid] = callback
callInfo.callback_id = cid
url += JSON.stringify callInfo
@openCustomURLinIFrame url
Любые идеи, как заставить это работать как на эмуляторе и фактического устройства?
UPDATE
До сих пор я думаю, что я установил его. Если бы я это сделал, это будет отмечено как ответ. Я должен был сделать следующее в coffeescript:
url += encodeURIComponent JSON.stringify callInfo
Это имело значение.
Спасибо.
_Yo dawg, Я слышал, что вам нравится JSON._ Почему у вас есть строка JSON в вашей строке JSON? Символ 42 вашей строки - это первая экранированная строка '' 'находится в этой встроенной строке JSON, поэтому проблема явно связана с вашей отменой этих данных. –
@AlexWayne, так это проблема в коде CoffeeScript или Object C? –
Выглядит как и код object-c, так как я просто сделал тест в coffeescript.org, и я могу сделать JSON.stringify в json и подкрепить это. Я могу вернуть все правильно. –