2011-09-14 95 views
0

有时它有效......有时它不会。很奇怪。间歇性应用程序崩溃:JQM Beta 3,Google Maps v3和MVC

我写了一个JQuery Mobile应用程序,应用程序的一部分访问Google Maps来显示特定的用户选择位置的地图。大约50%的时间这段代码正确执行。非常棒,就像我想要的一样。另外50%的时间,但是,应用程序崩溃。通过崩溃,我的意思是应用程序“突然停止”,然后关闭。没有警告或错误消息。应用程序不再运行了。 我的架构是这样的:MVC 2.0使用母版页。 JQM Beta 3,Google Maps API v3。该应用程序是一个Web应用程序,使用我刚刚提到的技术,但是它运行在Web浏览器Safari内部,位于安装的“本机”iPhone应用程序内部。正如我上面提到的那样,当应用程序崩溃时,崩溃的是原生iPhone应用程序。 调试/故障排除:我可以在100%的时间内成功运行应用程序,而不会通过在移动设备上使用本机浏览器Safari并导航到Web服务器上运行的Web应用程序而导致崩溃。只有当我启动“已安装的”“本机”iPhone应用程序并让本机应用程序导航到运行在同一个Web服务器上的同一个Web应用程序,然后导航到应用程序的地图部分时,我在第一段出现。我目前正在寻求检索和分析iPhone设备上本机生成的“崩溃报告”,但我从该崩溃报告中没有任何有用的信息。

我使用了一个非常简单的实现谷歌地图,用一些很基本的,标准代码:

<script type="text/javascript"> 
    $('#gmap-2').live("pageshow", function() { 
     initMap(); 
    }); 
    function initMap() { 
     var latlng = getLatLng(); 
     var myOptions = { 
      zoom: 12, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    } 
    function getLatLng() { 
     var latitude = "<%: Model.Latitude %>"; // "32.931962"; 
     var longitude = "<%: Model.Longitude %>"; //"-96.789191"; 
     var TSlatlng = new google.maps.LatLng(latitude, longitude); 
     return TSlatlng; 
    } 
</script> 
    <div data-role="content" data-theme="c"> 
     <div class="ui-bar-c ui-corner-all ui-shadow" style="padding: 1em;"> 
      <div id="map_canvas" style="height: 300px;"> 
      </div> 
     </div> 
</div> 

的 “头” 是这样的:

<!-- google maps api script --> 
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> 

<!-- core jQuery --> 
<script src="../../../../Scripts/jquerymobile/js/jquery-1.6.1.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(document).bind("mobileinit", function() { 
     $.mobile.page.prototype.options.addBackBtn = true; 
    }); 
</script> 
<!-- core jQuery Mobile --> 
<!-- BETA 3 --> 
<script src="../../../../Scripts/jquerymobile/js/jquery.mobile-1.0b3.min.js" type="text/javascript"></script> 
</head> 

回答

0

我解决了这个问题。为了完整性,我想在此发布解决方案。根本原因不在JQuery或JQuery Mobile中......也不在HTML或CSS中。根本原因是iPhone应用程序的“原生”部分(埋在Objective C中)中的内存问题。非法内存访问代码被从源代码中删除,现在一切正常。 Google地图呈现的是他们设计的。