Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8226741
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 7, 20262026-06-07T15:52:49+00:00 2026-06-07T15:52:49+00:00

I am currently making an application for IOS with the Monotouch framework which has

  • 0

I am currently making an application for IOS with the Monotouch framework which has a UITableView with a customized UITableViewCell (designed with XCode) containing UISwitches.

I manage the cells through the UITableViewSource but I clearly have a problem while managing the callbacks to the delegate methods assignated to the event UISwitch.ValueChanged of my cell’s switches.

Here is the UITableViewSource code I am working on, it might be more explicit :

        // This class manages the TableView content and its rows
    class MyTableViewDelegate : UITableViewSource
    {
        SatellitesViewController        satController;

        List<long>                      allocatedCells;

        public MyTableViewDelegate (SatellitesViewController controller)
        {
            satController = controller;
            allocatedCells = new List<long>();
        }

        public override int     RowsInSection (UITableView tableview, int section)
        {
            return satController.sats.Count;
        }

        // Called when the switch to show the satellite's display state is touched
        public void             showButtonHandler(object sender, EventArgs e)
        {
            System.Console.WriteLine("SHOW BUTTONHANDLER");
            if (sender != null)
            {
                CustomSwitch    switchButton = (CustomSwitch) sender;
                TLEForRedis     satToShow = this.satController.getSatTLEs(switchButton.idSat, false);

                if (satToShow != null)
                {
                    if (switchButton.On == true)
                        this.satController.glView.showSatellite(satToShow);
                    else
                        this.satController.glView.hideSatellite(satToShow.Id);
                }
            }
        }

        // Called when the switch to show the satellite's display state is touched
        public void             orbitButtonHandler(object sender, EventArgs e)
        {
            System.Console.WriteLine("ORBIT BUTTONHANDLER");
            if (sender != null)
            {
                CustomSwitch    orbitButton = (CustomSwitch) sender;
                TLEForRedis     satToShow = this.satController.getSatTLEs(orbitButton.idSat, false);

                if (satToShow != null)
                    this.satController.glView.setSatelliteOrbitDisplayState(satToShow.Id, orbitButton.On);
            }
        }

        //  Create the cell at indexPath
        public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
        {
            string          cellName;
            string          nibName;
                cellName = "PROTO_CELL";
                nibName = "CellView";   
            // Get the table cell which is described in the CellView.xib interface
            var cell = tableView.DequeueReusableCell(cellName) as CellView;

            if (cell == null)
            {
                cell = new CellView();
                var views = NSBundle.MainBundle.LoadNib(nibName, cell, null);
                cell = Runtime.GetNSObject( views.ValueAt(0) ) as CellView;
            }

            // Modify the cell with its own data
            SatsList sat = (SatsList) satController.sats [indexPath.Row];

            CustomSwitch    showButton = (CustomSwitch)cell.ViewWithTag(1);
            UILabel         satName = (UILabel)cell.ViewWithTag(2);
            UILabel         catalogNumber = (UILabel)cell.ViewWithTag(3);
            CustomSwitch    favoriteButton = (CustomSwitch)cell.ViewWithTag(4);
            CustomSwitch    orbitButton = (CustomSwitch)cell.ViewWithTag(5);

            UIColor         lightgrey = new UIColor(0.85f, 0.85f, 0.85f, 1.0f);
            tableView.BackgroundColor = lightgrey;

            if (sat != null)
            {
                satName.Text = sat.satName;
                catalogNumber.Text = string.Format("{0}", sat.catalogNumber);
            }
            else
                System.Console.WriteLine("[ERROR] Satellite was not found for row " + indexPath.Row);

            // Set switch state to on when the satellite is already being displayed
            if (this.satController.glView.checkForSatelliteExistency(sat.Id))
            {
                System.Console.WriteLine(sat.satName + "found");
                showButton.SetState(true, false);
                Satellite   sat3D = this.satController.glView.checkForSatelliteOrbit(sat.Id);
                if (sat3D.displayOrbit())
                    orbitButton.SetState(true, false);
            }
            else // force switch state to off when satellite is not displayed yet
            {   
                showButton.SetState(false, false);
                orbitButton.SetState(false, false);
            }
            favoriteButton.SetState(false, false);

            // Bind changing state switches' events in order to display or hide the corresponding satellite
            showButton.setData(sat.Id);
            favoriteButton.setData(sat.Id);
            orbitButton.setData(sat.Id);
            if (!this.allocatedCells.Contains(indexPath.Row))
            {
                showButton.ValueChanged += this.showButtonHandler;
                orbitButton.ValueChanged += this.orbitButtonHandler;
            }
            this.allocatedCells.Add(indexPath.Row);
            return cell;
        }

}

Actually, the result of that above code, is that I can scroll up/down in the tableView without problems and I can even get the line “SHOW BUTTONHANDLER” printed until I am not clicking on a switch that already gone out of the screen by scrolling.
But, when I click on a switch that is part of a cell which has been drawn before in the top of the list and which reappeared after I scrolled back to the top, then I get the following error :

[7864:1507] -[UIControlTargetAction BridgeSelector]: unrecognized selector sent to instance 0x14462a70

or the following stack trace :

Stacktrace:

  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff>
  at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00042] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29
  at App.Application.Main (string[]) [0x0001b] in App/Main.cs:24
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>

Native stacktrace:

0   App                      0x0009094c mono_handle_native_sigsegv + 284
1   App                      0x00005cd8 mono_sigsegv_signal_handler + 248
2   libSystem.B.dylib                   0x90d9c05b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   UIKit                               0x0222e55a -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
5   UIKit                               0x022d3b76 -[UIControl sendAction:to:forEvent:] + 66
6   UIKit                               0x022d403f -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503
7   UIKit                               0x02425a6c -[_UISwitchInternalView _sendActions] + 121
8   Foundation                          0x0173786d __NSFireDelayedPerform + 389
9   CoreFoundation                      0x01195966 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
10  CoreFoundation                      0x01195407 __CFRunLoopDoTimer + 551
11  CoreFoundation                      0x010f87c0 __CFRunLoopRun + 1888
12  CoreFoundation                      0x010f7db4 CFRunLoopRunSpecific + 212
13  CoreFoundation                      0x010f7ccb CFRunLoopRunInMode + 123
14  GraphicsServices                    0x04789879 GSEventRunModal + 207
15  GraphicsServices                    0x0478993e GSEventRun + 114
16  UIKit                               0x0222ba9b UIApplicationMain + 1175
17  ???                                 0x0ebdde65 0x0 + 247324261
18  ???                                 0x0ebdc550 0x0 + 247317840
19  ???                                 0x0b7f7bac 0x0 + 192904108
20  ???                                 0x0b7f7d86 0x0 + 192904582
21  App                      0x0000a042 mono_jit_runtime_invoke + 722
22  App                      0x00169f4e mono_runtime_invoke + 126
23  App                      0x0016e034 mono_runtime_exec_main + 420
24  App                      0x00173455 mono_runtime_run_main + 725
25  App                      0x00067245 mono_jit_exec + 149
26  App                      0x002116a5 main + 2837
27  App                      0x00003095 start + 53
28  ???                                 0x00000004 0x0 + 4

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

So, do you have an idea for a solution ? The delegate methods to the switches seem to be uncorrectly registered but I don’t know what is wrong. Because I also tried this without the

if (!this.allocatedCells.Contains(indexPath.Row))

line, in order to register delegates only once, but the result is the same. Do I need to remove that if and try to “unregister” the delegate when the cell goes out of the screen ?

I hope you have an idea, and dont hesitate to post your opinions/advices/remarks about all this.

Thanks in advance !

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-07T15:52:51+00:00Added an answer on June 7, 2026 at 3:52 pm

    Ok, I found the problem with my code, it was due to the delegates binded to the switches. Actually, I forgot to unregister the delegates of the cells which were going out of the screen.
    The fact of dequeing a ReuseableCell doesnt removes delegates linked to the content of the cell => this lead to call my showButtonHandler(sender, args) method with a sender whose references changed.

    So, the solution for my code is to change the last part to :

    // Bind changing state switches' events in order to display or hide the corresponding satellite
                showButton.setData(sat.Id);
                favoriteButton.setData(sat.Id);
                orbitButton.setData(sat.Id);
    
                showButton.ValueChanged -= this.showButtonHandler;
                orbitButton.ValueChanged -= this.orbitButtonHandler;
                showButton.ValueChanged += this.showButtonHandler;
                orbitButton.ValueChanged += this.orbitButtonHandler;
                return cell;
            }
    

    In my case, it isnt even necessary to register cells in my old allocatedCells list.
    The old delegates are removed (-=) from the switch once the cell is being reused, and replaced(+=) with a new fresh reference.

    Thank you all, whatever.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm currently making ipad application. I have create an uiviewcontroller which is appear with
I am currently making a Facebook application for iOS that pulls the profile feed
I'm currently making an application which draws out a certain network of signs to
I'm making an application which uses OpenGL and currently store an array of objects
I am currently making a application that has several reference DLL and i am
I am currently making an android application which need to present a lot of
I am currently making an application in which I have two threads running, and
I am currently making a Facebook iOS Application and In the app I am
I'm currently making an application with Backbone.js and some JQuery libraries. Today I work
At school we are busy making a Spotify application. I am currently making an

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.