2013-02-18 70 views
1

我正在嘗試使用Titanium SDK構建跨平臺(Android-ios)移動應用程序。我很長時間沒有機會爲ios構建它,我只使用我的Windows-android組合來測試它,它在Android系統上效果很好。但是,當我嘗試建立它在Mac上的IOS,我得到這個消息,並關閉應用程序在第二:Titanium NSInvalidArgumentException

的應用已與未捕獲的異常 「NSInvalidArgumentException」的崩潰。

因爲我不能提供任何相關的代碼,因爲異常沒有顯示什麼是我的javascript代碼的問題,我當然沒有寫任何人,IOS特定的代碼,我不知道,是什麼去做。

從幾篇文章我已經找到這裏是我曾嘗試:

  • 重啓鈦工作室
  • 清潔項目
  • 確信關閉任何ResultSet,並DB對象時 完成他們(如這裏建議的:topic
  • 在3.0.0和2.xx版本上測試代碼

我期待着任何建議,就如何解決這個問題,如果你有它! 在此先感謝!

更新: 問題是以下內容:我叫hasOwnProperty鈦UI元素,並在iOS版本,如果我這些元素不具備此功能(這是奇怪的,因爲每一個JavaScript對象擁有它,我沒有錯)。

如果你有類似的問題,我建議閱讀本article,除了mr.VVoos答案,它幫助了很多避免我有問題!

+0

我對這種類型的異常所做的事情是在代碼的開頭(第一行)放置一個斷點,然後逐步調試直到您遇到此異常。通常這將有助於 – 2013-02-18 20:22:18

回答

1

我正在開發與Titanim和iOS & Android很長一段時間。通常,iOS和Android部分代碼之間存在很多差異。

在大多數情況下,這些異常意味着調用的操作不適用於被調用的類。 (在Java中,這將意味着:Class.method() - > Class沒有稱爲method()的方法)。

您可以嘗試以調試模式運行應用程序(在iOS模擬器上)。與Android相比,調試iOS有很大的優勢。通常,iOS模擬器會在出現異常時停止,並顯示導致異常的JavaScript代碼。不幸的是,這一直不工作,它只能在模擬器上工作。

如果不提供任何進一步的信息,您可以執行以下操作: - 去你app.js,並在第一行的一個設置一個斷點。 - 在調試模式下啓動應用程序。 - 每次移動此斷點直到您的應用崩潰 - 也許您可以檢測到錯誤或提供更多信息。

最後一個提示:如果有任何平臺特定的部分,請檢查您的代碼。 (像Android意圖和iOS上不可用的東西)。

我知道這可能非常難看,但我們必須解決許多這些討厭的問題,同時從iOS移植到Android。

+0

感謝您的信息,我一定會嘗試測試一切是否有方法。然後逐行測試。如果我給鈦代理對象,如窗口或按鈕自定義功能,它應該在所有平臺上正常工作嗎? – 2013-02-18 20:13:57

+0

好吧,通常你可以將自定義屬性應用於**所有**對象(有時由於特殊的關鍵字有錯誤 - 我認爲我們有類似的問題,因爲有一個錯誤的leyword,我們有像你一樣的錯誤)。但最好創建包含UI元素和附加信息的對象(請參閱鈦的最佳實踐)。應用於UI對象或通過eventlistener傳輸的函數無法正常工作。 @ bali182 – 2013-02-18 20:22:34

+0

感謝您的幫助,我發現了問題......我在Titanium Ui元素上調用了hasOwnProperty:D – 2013-02-20 09:09:54