【发布时间】:2013-11-21 05:45:35
【问题描述】:
我正在为我的客户开发一个演示应用程序。此演示应用程序的目的是展示 Worklight Hybrid 应用程序可以在所有环境中运行。我的演示应用程序在 Android Emulator 中运行良好,但是当我将 Iphone 环境文件夹中 Package 文件夹中的 zip 文件传输到具有 XCODE 5.0 的 MAC 系统并尝试运行该应用程序时,我收到此错误 -
"error JSON.stringify()ing argument: TypeError: JSON.stringify cannot serialize cyclic structures"
我正在使用 Worklight V6 和其中提供的默认 dojo 版本。我在网上搜索,发现很少有人也在为此苦苦挣扎。这里报告了一个例子-
谁能告诉我这个错误的根本原因是什么?似乎问题出在模拟器或worklight中使用的cordova插件版本上。有什么解决方法吗?
这是我的 XCode 日志-
2013-11-17 22:08:02.290 KaiserTestApp[6396:a0b] ***TeaLeaf Library Version***: 8.8.1.56
2013-11-17 22:08:03.002 KaiserTestApp[6396:a0b] Application windows are expected to have a root view controller at the end of application launch
2013-11-17 22:08:04.129 KaiserTestApp[6396:3e07] Web resources integrity test is disabled.
2013-11-17 22:08:04.134 KaiserTestApp[6396:a0b] Multi-tasking -> Device: YES, App: YES
2013-11-17 22:08:05.003 KaiserTestApp[6396:a0b] Resetting plugins due to page load.
2013-11-17 22:08:05.509 KaiserTestApp[6396:a0b] Finished load of: file:///Users/prasuna/Library/Application Support/iPhone Simulator/7.0.3/Applications/5BFF2FA8-9E4B-45D3-B991-43EE8008A5F4/Library/Application Support/www956725435/default/KaiserTestApp.html
2013-11-17 22:08:05.524 KaiserTestApp[6396:a0b] DEPRECATION NOTICE: The Connection ReachableViaWWAN return value of '2g' is deprecated as of Cordova version 2.6.0 and will be changed to 'cellular' in a future release.
2013-11-17 22:08:05.532 KaiserTestApp[6396:a0b] { appVersionPref = "1.0"; freeSpace = 132894613504; wlSkinLoaderChecksum = "(null)"; wlSkinName = default; }
2013-11-17 22:08:05.541 KaiserTestApp[6396:a0b] [DEBUG] wlclient init started
2013-11-17 22:08:05.542 KaiserTestApp[6396:a0b] [DEBUG] Read cookies: null
2013-11-17 22:08:05.542 KaiserTestApp[6396:a0b] [DEBUG] CookieMgr read cookies: {}
2013-11-17 22:08:05.547 KaiserTestApp[6396:a0b] [DEBUG] before: app init onSuccess
2013-11-17 22:08:05.548 KaiserTestApp[6396:a0b] [DEBUG] after: app init onSuccess
2013-11-17 22:08:05.548 KaiserTestApp[6396:a0b] [DEBUG] added onPause event handler
2013-11-17 22:08:05.549 KaiserTestApp[6396:a0b] [DEBUG] wlclient init success
2013-11-17 22:08:05.638 KaiserTestApp[6396:a0b] [LOG] I am in main js file
2013-11-17 22:08:05.638 KaiserTestApp[6396:a0b] [DEBUG] HomeController created
2013-11-17 22:08:05.639 KaiserTestApp[6396:a0b] [DEBUG] Testing log
2013-11-17 22:09:21.000 KaiserTestApp[6396:a0b] [ERROR] error JSON.stringify()ing argument: TypeError: JSON.stringify cannot serialize cyclic structures.
2013-11-17 22:09:21.000 KaiserTestApp[6396:a0b] [ERROR] error JSON.stringify()ing argument: TypeError: JSON.stringify cannot serialize cyclic structures.
我也尝试在 IOS 6 中运行演示应用程序,但在编译时出现以下错误。有人可以帮我理解这意味着什么,我该如何解决这个问题?
setenv WRAPPER_EXTENSION app
setenv WRAPPER_NAME KaiserTestApp.app
setenv WRAPPER_SUFFIX .app
setenv XCODE_APP_SUPPORT_DIR /Applications/Xcode.app/Contents/Developer/Library/Xcode
setenv XCODE_PRODUCT_BUILD_VERSION 4H1503
setenv XCODE_VERSION_ACTUAL 0463
setenv XCODE_VERSION_MAJOR 0400
setenv XCODE_VERSION_MINOR 0460
setenv YACC yacc
/bin/sh -c /Users/wppa/Library/Developer/Xcode/DerivedData/KaiserTestProjKaiserTestAppIphone-egvnwnfozzvukmdsxsnkzlsfjwgz/Build/Intermediates/KaiserTestProjKaiserTestAppIphone.build/Debug-iphonesimulator/KaiserTestProjKaiserTestAppIphone.build/Script-427B829D1393724500F223DC.sh
Running a custom build phase script: buildtime.sh
/Users/wppa/Library/Developer/Xcode/DerivedData/KaiserTestProjKaiserTestAppIphone- egvnwnfozzvukmdsxsnkzlsfjwgz/Build/Intermediates/KaiserTestProjKaiserTestAppIphone.build/Debug-iphonesimulator/KaiserTestProjKaiserTestAppIphone.build/Script-427B829D1393724500F223DC.sh: line 7: /Users/wppa/Kaiser/buildtime.sh: Permission denied
DONE with script: buildtime.sh (exitStatus=126)\n\n
【问题讨论】:
-
该错误意味着一个对象被传递给
JSON.stringify,它在其子对象中引用了自身(因此是“循环结构”)。我很确定JSON.stringify不能在任何平台上处理这样的结构(它会导致无限递归),所以我不清楚为什么这只会发生在 iOS 上。如果您可以发布堆栈跟踪和导致问题的部分 JSON 对象,这可能有助于隔离问题... -
嗨,Ken,正如我在我的应用程序在 Android 模拟器中运行良好的问题中提到的,问题仅出在 IOS 模拟器上。我做了一些故障排除,发现问题可能是模拟器与 dojo 不兼容。起初代码在 dojo Ready 函数中抛出错误。当我删除它时,它开始在另一行抛出错误,这又是一个 dojo 代码。 Dojo 在内部使用 Json.strigify 并且不知何故 IOS Simulator 有问题。
-
我很快就会认为问题出在 Worklight 或自定义代码中 - 我没有在 iOS 上使用 Dojo 看到这个问题......这就是我要求堆栈跟踪的原因。是的,Dojo 在某些情况下使用 JSON.stringify,但问题在于 传递 的内容(以及传递的内容)。
-
通过堆栈跟踪,您是指我在 Xcode 中获取的日志吗?我已经用日志更新了我的问题。当 dojo Ready 函数尝试执行时,我收到 JSON.stringify 错误。
-
@Idan- 我正在等待您对此的特别评论。请帮忙。
标签: ios cordova dojo xcode5 ibm-mobilefirst