mono - 仅在MonoTouch 4.0.1中启动事件时,应用程序崩溃

标签 mono crash xamarin.ios monodevelop

我有一个在MonoTouch 3.2.6下工作的应用程序;
启动任何触摸事件时,MonoTouch 4.0.1下的同一应用程序将崩溃。

source上阅读了另一个问题,我知道问题出在从GC收集的对象中,但是我看不到哪个是。应用程序启动并动态加载TabBar,但是单击任何TabItem会使应用​​程序崩溃。下面列出了文件main.cs和TabDelegate.cs:Main.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;
using IPadApp.Classes;
using AggiornamentiCL;


namespace VSViewer
{
    public class Application
    {
        static void Main (string[] args)
        {
            UIApplication.Main (args);
        }
    }


    // The name AppDelegate is referenced in the MainWindow.xib file.
    public partial class AppDelegate : UIApplicationDelegate
    { 
        public static UITabBar  tabmain ;
        public static UIViewController ctrMain;
        public static Home ctrHome;
        public static UIView viewMain;

        public static WrapperMenu MenuManager;  
        public static WrapperValueStories ValueStoriesManager;  
        public static WrapperBibliography BibliographyManager;
        public static WrapperStakeHolder StakeHolderManager;

        public static Aggiornamento AggiornamentoManager;

        public static string RegionId = "";
        public static string RegionName= "";


        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // Reperisco il RegionName dai settings
            RegionName= NSUserDefaults.StandardUserDefaults.StringForKey("regione");
            // Inizializzo le variabili
            tabmain = tabMain;
            ctrMain = ctrmain;
            viewMain = viewContent;
            ctrHome = new Home(String.Empty, RegionName);
            // Inizializzo i manager
            MenuManager= new WrapperMenu();
            ValueStoriesManager= new WrapperValueStories(ref viewMain);
            BibliographyManager = new WrapperBibliography();
            StakeHolderManager = new WrapperStakeHolder();
            AggiornamentoManager = new Aggiornamento(ctrMain);


            // Imposto i delegati
            tabmain.Delegate = new TabDelegate(viewMain,  
                                               ctrMain,  
                                               MenuManager, 
                                               ValueStoriesManager, 
                                               BibliographyManager,
                                               StakeHolderManager,
                                               AggiornamentoManager);



            // Reperisco il Root Menu 
            MenuManager.GetRootMenu(ref tabmain);

            if(string.IsNullOrEmpty(RegionName) || String.IsNullOrEmpty(Utils.GetRegionIDByName(RegionName)))
                MenuManager.SoloRegioni(ref tabmain,false);
            else
            {
                RegionId = Utils.GetRegionIDByName(RegionName);
                Utils.LoadSplash(viewMain,"",RegionName);
            }
            // If you have defined a view, add it here:
             window.AddSubview (ctrMain.View);

            window.MakeKeyAndVisible ();

            Thread tAggiornaDati = new Thread(new ThreadStart( Aggiornamento.AggiornaDati));
            tAggiornaDati.Start();

            return true;

        }           
    }   
}

TabDelegate.cs:
using System;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using IPadApp.Classes;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;

namespace VSViewer
{
    public class TabDelegate : UITabBarDelegate
    {
        private WrapperMenu MenuManager;        
        private WrapperValueStories ValueStoriesManager;
        private WrapperBibliography BibliographyManager; 
        private WrapperStakeHolder StakeHolderManager; 
        private Aggiornamento AggiornamentoManager;

        private UIView viewMain;
        //private UIViewController ctrmain;
        private NodeAction previousAction ;
        private int previousNode=0;

        public TabDelegate (UIView pviewMain,                           
                            UIViewController pctrMain,  
                            WrapperMenu pMenuManager, 
                            WrapperValueStories pValueStoriesManager, 
                            WrapperBibliography pBibliographyManager, 
                            WrapperStakeHolder pStakeHolderManager, 
                            Aggiornamento pAggiornamento)
        {
            viewMain = pviewMain;
            MenuManager = pMenuManager;
            ValueStoriesManager = pValueStoriesManager;
            BibliographyManager= pBibliographyManager;
            StakeHolderManager = pStakeHolderManager;
            AggiornamentoManager = pAggiornamento;
        }

        private int GetSelectedTabBarIndex (UITabBar tabbar, UITabBarItem item)
        {
            for (int i = 0; i < tabbar.Items.Count (); i++) {
                if (item == tabbar.Items[i])
                    return i;
            }

            return -1;
        }

        public override void ItemSelected (UITabBar tabbar, UITabBarItem item)
        {
            int itemSelectedIndex = GetSelectedTabBarIndex (tabbar, item);
            MerqurioMenuNode currentNode = MenuManager.GetCurrentNodeByPos (itemSelectedIndex);

            if (!(previousAction==currentNode.Action && previousNode == currentNode.MenuID) ||
                  currentNode.Action== NodeAction.OpenSubMenu)
            {
            // Rimuovo tutte le immagini della VS che sto abbandonando
                if (previousAction== NodeAction.OpenValueStory) ValueStoriesManager.RemoveAllSlides();
                // Detacho la View dell'azione precedente
                foreach (UIView subView in this.viewMain.Subviews)
                {
                    subView.RemoveFromSuperview ();
                    subView.Dispose();
                }
                // Mostro la view corretta
                switch (currentNode.Action) {
                    case NodeAction.OpenSubMenu:
                        MenuManager.GetMenuByNodeId (ref tabbar, itemSelectedIndex);
                        // Imposto la breadcrumb
                        if (currentNode.ParentMenuID==0 && currentNode.Direction== NodeDirection.Forward) Breadcrumb.SetMolecola(currentNode.ViewLabel);
                        else if (currentNode.ParentMenuID==0 &&currentNode.Direction== NodeDirection.Backward)  Breadcrumb.SetMolecola(""); 
                        Breadcrumb.UpdateBreadcrumb(currentNode.ViewLabel, AppDelegate.RegionName);
                        // Mostro la Splash
                        Utils.LoadSplash(viewMain,currentNode.ViewLabel,AppDelegate.RegionName);
                        break;
                    case NodeAction.OpenValueStory:
                        ValueStoriesManager.ShowValueStory (currentNode, AppDelegate.RegionId);
                        break;
                    case NodeAction.OpenBibliography:               
                        BibliographyManager.ShowBibliography(viewMain,currentNode.FileName);
                        break;
                    case NodeAction.OpenStakeHolder:                
                        StakeHolderManager.ShowStakeHolder(viewMain);
                        break;
                    case NodeAction.OpenRegion: 
                        Regioni ctrRegioni = new Regioni();
                        this.viewMain.AddSubview(ctrRegioni.View);
                        break;
                    case NodeAction.OpenSimulator1:
                        Simulator_1 ctrSimulator1 = new Simulator_1();
                        this.viewMain.AddSubview(ctrSimulator1.View);
                        break;
                    case NodeAction.OpenSimulator2:
                        Simulator_2 ctrSimulator2 = new Simulator_2();
                        this.viewMain.AddSubview(ctrSimulator2.View);
                        break;
                case NodeAction.OpenAggiornamento:
                        this.viewMain.AddSubview(AggiornamentoManager.View);

                        break;
                    default:
                        break;
                }

            }

            // Aggiorno i contatori
            previousAction = currentNode.Action;
            previousNode = currentNode.MenuID;
        }
    }
}

请帮助..我找不到MonoTouch 3.2.6的旧文件...

最佳答案

当我查看Main.cs文件时,您有一个模式,除了其中一种情况是相反的。

        **tabmain = tabMain**;
        ctrMain = ctrmain;
        viewMain = viewContent;

我想你可能是说tabMain = tabmain;

关于mono - 仅在MonoTouch 4.0.1中启动事件时,应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792907/

相关文章:

ios - 在 ios 应用程序中没有声音的振动

c# - 检查对象是字典还是列表

xaml - Xamarin Forms:如何为按钮添加填充?

c# - Column Extent1.Id 在带有 Entity Framework 6 和 PostgreSQL 的 Mono 中不存在

mono - MonoTouch 和 MonoDroid 是否为两个平台生成相同的 ARM6/7 代码?

iPhone - 快速应用程序切换和 iOS 4

C# (mono) Linux Web 服务器托管,跨线程具有一致的静态变量

asp.net-mvc - Windows XP上的Visual Studio 2010突然崩溃,然后停止工作,直到重新安装

c++ - 暴力破解不同输入导致程序崩溃的策略是什么?

ios - 应用程序崩溃并显示 [BTAlertmissAnimated :] unrecognized selector