从ABPeoplePickerModule设置TextField的Text时获得了SIGSEGV

时间:2012-10-29 19:16:18

标签: xamarin.ios ios6 sigsegv abpeoplepickerview

在我的应用中,用户需要输入一些地址信息。 自1.0版以来,我提供了一个Addressbook Button。 这在我之前的测试中运行良好,但是现在当我尝试设置我的UITextField.Text属性时,我得到了一个SIGSEGV。每当我尝试在MonoTouches调试模式下从PeoplePicker中选择一个地址时,就会发生此错误,当我在我的iPhone上尝试在设置TextFields和推送下一个ViewController之间随机发生错误时。 我的代码中有什么问题或是错误吗?

        //AB Button Event
        addressBook.TouchUpInside += delegate {
            //Create new Picker
            ABPeoplePickerNavigationController PP = new ABPeoplePickerNavigationController();
            //Cancel Event
            PP.Cancelled += delegate {
                NavigationController.DismissViewController(true, null);
            };
            //Select Event
            PP.SelectPerson += delegate(object sender, ABPeoplePickerSelectPersonEventArgs e) {
                //Detailed Person View
                ABPersonViewController pv = new ABPersonViewController();
                //Action when clicked on a Property
                pv.PerformDefaultAction += delegate(object person, ABPersonViewPerformDefaultActionEventArgs ev) {
                    //If the Property was an Address
                    if(ev.Property.ToString() == "Address"){
                        string lands = "", orts = "", plzs = "";
                        try{
                            //Read the Detailed Address Data from the clicked property
                            ABMultiValue<PersonAddress> addresses = ev.Person.GetAllAddresses();
                            PersonAddress[] values = addresses.GetValues();
                            lands = values[ev.Identifier.Value].Country.ToString();
                            orts = values[ev.Identifier.Value].City.ToString();
                            plzs = values[ev.Identifier.Value].Zip.ToString();
                        }catch{
                            Console.WriteLine("Fehlerhafte Addresse");
                        }
                        //Set the Textfield with the new information
                        //iPhone Simulator in Debugmode crashes here everytime
                        land.Text = lands;
                        ort.Text = orts;
                        plz.Text = plzs;
                        //Close the Module
                        NavigationController.DismissViewController(true, null);
                    }
                };
                //Set selected Person for the person View
                pv.DisplayedPerson = e.Person;
                //Open Person View with navigation from the PeoplePicker Controller
                PP.PushViewController(pv, true);
            };
            //Open PeoplePicker Controller Module
            NavigationController.PresentViewController(PP, true, null);
        };

//AB Button Event addressBook.TouchUpInside += delegate { //Create new Picker ABPeoplePickerNavigationController PP = new ABPeoplePickerNavigationController(); //Cancel Event PP.Cancelled += delegate { NavigationController.DismissViewController(true, null); }; //Select Event PP.SelectPerson += delegate(object sender, ABPeoplePickerSelectPersonEventArgs e) { //Detailed Person View ABPersonViewController pv = new ABPersonViewController(); //Action when clicked on a Property pv.PerformDefaultAction += delegate(object person, ABPersonViewPerformDefaultActionEventArgs ev) { //If the Property was an Address if(ev.Property.ToString() == "Address"){ string lands = "", orts = "", plzs = ""; try{ //Read the Detailed Address Data from the clicked property ABMultiValue<PersonAddress> addresses = ev.Person.GetAllAddresses(); PersonAddress[] values = addresses.GetValues(); lands = values[ev.Identifier.Value].Country.ToString(); orts = values[ev.Identifier.Value].City.ToString(); plzs = values[ev.Identifier.Value].Zip.ToString(); }catch{ Console.WriteLine("Fehlerhafte Addresse"); } //Set the Textfield with the new information //iPhone Simulator in Debugmode crashes here everytime land.Text = lands; ort.Text = orts; plz.Text = plzs; //Close the Module NavigationController.DismissViewController(true, null); } }; //Set selected Person for the person View pv.DisplayedPerson = e.Person; //Open Person View with navigation from the PeoplePicker Controller PP.PushViewController(pv, true); }; //Open PeoplePicker Controller Module NavigationController.PresentViewController(PP, true, null); };

提前致谢!

1 个答案:

答案 0 :(得分:2)

刚刚发布的MonoTouch 6.0.5修复了类似的issue