Ios Monotouch更新至5.2.13后应用程序崩溃

Ios Monotouch更新至5.2.13后应用程序崩溃,ios,xamarin.ios,xamarin,Ios,Xamarin.ios,Xamarin,在我将monotouch更新到5.2.13版后,当我在ui按钮内触摸时,我的应用程序崩溃 关于我的代码:(这是一个登录视图的问题): 我有一个UIViewController,其中包括一个滚动视图。 对于每个用户,ScrollView提供了一个UIView(UserImageView)。 此UserImageView包含UserImage、用户名等。在用户图像上放置一个UIButton,该按钮应捕捉选定用户的触摸事件。 此按钮会更精确地导致ui视图中的HitTest方法下面的异常 我得到以下跟踪

在我将monotouch更新到5.2.13版后,当我在
ui按钮内触摸时,我的应用程序崩溃

关于我的代码:(这是一个登录视图的问题):

我有一个
UIViewController
,其中包括一个滚动视图。 对于每个用户,ScrollView提供了一个
UIView
(UserImageView)。 此UserImageView包含UserImage、用户名等。在用户图像上放置一个UIButton,该按钮应捕捉选定用户的触摸事件。 此按钮会更精确地导致
ui视图中的
HitTest
方法下面的异常

我得到以下跟踪:

  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 MF.Stationaer.iPad.Application.Main (string[]) <IL 0x00028, 0x00073>
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
0   MFiPad_MD            0x0009061c mono_handle_native_sigsegv + 284
1   MFiPad_MD            0x000059a8 mono_sigsegv_signal_handler + 248
2   libsystem_c.dylib                   0x92cd259b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   UIKit                               0x0228c741 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 96
5   CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
6   CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
7   CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
8   UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
9   UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
10  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
11  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
12  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
13  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
14  UIKit                               0x022a1157 -[UIScrollView hitTest:withEvent:] + 79
15  UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
16  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
17  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
18  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
19  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
20  UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
21  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
22  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
23  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
24  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
25  UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
26  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
27  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
28  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
29  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
30  UIKit                               0x02286dbd +[UIWindow _hitTestToPoint:pathIndex:forEvent:] + 378
31  UIKit                               0x02258ca0 _UIApplicationHandleEvent + 1648
32  GraphicsServices                    0x047c5ef5 PurpleEventCallback + 1274
33  CoreFoundation                      0x011a9195 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
34  CoreFoundation                      0x0110dff2 __CFRunLoopDoSource1 + 146
35  CoreFoundation                      0x0110c8da __CFRunLoopRun + 2218
36  CoreFoundation                      0x0110bd84 CFRunLoopRunSpecific + 212
37  CoreFoundation                      0x0110bc9b CFRunLoopRunInMode + 123
38  GraphicsServices                    0x047c47d8 GSEventRunModal + 190
39  GraphicsServices                    0x047c488a GSEventRun + 103
40  UIKit                               0x02258626 UIApplicationMain + 1163
41  ???                                 0x0b96e514 0x0 + 194438420
42  ???                                 0x0b96d6c0 0x0 + 194434752
43  ???                                 0x0b96d33c 0x0 + 194433852
44  ???                                 0x0b96d42f 0x0 + 194434095
45  MFiPad_MD            0x00009d12 mono_jit_runtime_invoke + 722
46  MFiPad_MD            0x00169e4e mono_runtime_invoke + 126
47  MFiPad_MD            0x0016df34 mono_runtime_exec_main + 420
48  MFiPad_MD            0x001732e5 mono_runtime_run_main + 725
49  MFiPad_MD            0x00066f15 mono_jit_exec + 149
50  MFiPad_MD            0x002115d5 main + 2837
51  MFiPad_MD            0x00002d65 start + 53
堆栈跟踪:

  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 MF.Stationaer.iPad.Application.Main (string[]) <IL 0x00028, 0x00073>
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
0   MFiPad_MD            0x0009061c mono_handle_native_sigsegv + 284
1   MFiPad_MD            0x000059a8 mono_sigsegv_signal_handler + 248
2   libsystem_c.dylib                   0x92cd259b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   UIKit                               0x0228c741 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 96
5   CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
6   CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
7   CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
8   UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
9   UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
10  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
11  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
12  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
13  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
14  UIKit                               0x022a1157 -[UIScrollView hitTest:withEvent:] + 79
15  UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
16  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
17  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
18  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
19  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
20  UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
21  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
22  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
23  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
24  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
25  UIKit                               0x0228c765 __38-[UIView(Geometry) hitTest:withEvent:]_block_invoke_0 + 132
26  CoreFoundation                      0x0116cf1a __NSArrayChunkIterate + 362
27  CoreFoundation                      0x01138635 __NSArrayEnumerate + 997
28  CoreFoundation                      0x01138026 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102
29  UIKit                               0x0228c66b -[UIView(Geometry) hitTest:withEvent:] + 646
30  UIKit                               0x02286dbd +[UIWindow _hitTestToPoint:pathIndex:forEvent:] + 378
31  UIKit                               0x02258ca0 _UIApplicationHandleEvent + 1648
32  GraphicsServices                    0x047c5ef5 PurpleEventCallback + 1274
33  CoreFoundation                      0x011a9195 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
34  CoreFoundation                      0x0110dff2 __CFRunLoopDoSource1 + 146
35  CoreFoundation                      0x0110c8da __CFRunLoopRun + 2218
36  CoreFoundation                      0x0110bd84 CFRunLoopRunSpecific + 212
37  CoreFoundation                      0x0110bc9b CFRunLoopRunInMode + 123
38  GraphicsServices                    0x047c47d8 GSEventRunModal + 190
39  GraphicsServices                    0x047c488a GSEventRun + 103
40  UIKit                               0x02258626 UIApplicationMain + 1163
41  ???                                 0x0b96e514 0x0 + 194438420
42  ???                                 0x0b96d6c0 0x0 + 194434752
43  ???                                 0x0b96d33c 0x0 + 194433852
44  ???                                 0x0b96d42f 0x0 + 194434095
45  MFiPad_MD            0x00009d12 mono_jit_runtime_invoke + 722
46  MFiPad_MD            0x00169e4e mono_runtime_invoke + 126
47  MFiPad_MD            0x0016df34 mono_runtime_exec_main + 420
48  MFiPad_MD            0x001732e5 mono_runtime_run_main + 725
49  MFiPad_MD            0x00066f15 mono_jit_exec + 149
50  MFiPad_MD            0x002115d5 main + 2837
51  MFiPad_MD            0x00002d65 start + 53
在执行本机代码时获得了一个SIGSEGV。这通常表明 mono运行时或某个本机库中出现致命错误 由您的应用程序使用

以下是我的代码的重要部分:

public class LoginViewController : UIViewController
{
    ... 
    public override void ViewDidLoad()
    {
        ...

        BuildUserUI();

        ...
    }

    private void BuildUserUI()
    {
        currentIconLocation = new PointF(50, 10);

        for (var i = 0; i < UserList.List.Count; i++)
            CreateUserInGrid(UserList.GetUserByIndex(i));
    }

    private void CreateUserInGrid(LoginUser user)
    {
        var imgFrame = new RectangleF(currentIconLocation.X, currentIconLocation.Y, 140, 170);

        var loginImg = new UILoginImage(imgFrame);
        loginImg.Image = user.Image ?? defaultUserImage.CGImage;
        loginImg.Name = user.Nachname;

        if (!string.IsNullOrEmpty(user.Vorname))
            loginImg.Name += ", " + user.Vorname;

        loginImg.Tag = user.UserIndex;
        loginImg.AddTarget(this, new Selector("ShowNumberPad:"), UIControlEvent.TouchUpInside);
        loginImg.LoginUser = user;
        scrollView.AddSubview(loginImg);
        loginImages.Add(loginImg);

        limitedScrollView.UserInteractionEnabled = false;

        var newSize = new SizeF(scrollView.Frame.Size.Width, currentIconLocation.Y + imgFrame.Size.Height + 20);
        scrollView.ContentSize = newSize;
        limitedScrollView.ContentSize = new SizeF(limitedScrollView.Frame.Size.Width, limitedScrollView.Frame.Size.Height);

        currentIconLocation.X += imgFrame.Size.Width;

        if (currentIconLocation.X + imgFrame.Size.Width > scrollView.Frame.Size.Width)
        {
            currentIconLocation.Y += imgFrame.Size.Height;
            currentIconLocation.X = 50;
        }
    }

    [Export("ShowNumberPad:")]
    private void ShowNumberPad(NSObject sender)
    {
        ...
    }
}

public class UILoginImage : UIView
{
    [Export("initWithFrame:")]
    public UILoginImage(RectangleF frame)
        : base(frame)
    {
        var shadowFrame = new RectangleF(0, 0, 117, 148);

        wrapperControl = new UIControl(shadowFrame);
        AddSubview(wrapperControl);

        shadowImage = new UIImageView(shadowFrame);
        shadowImage.Image = ImageCache.GetResourceImage("Images/Login/LoginSchatten.png");
        wrapperControl.AddSubview(shadowImage);

        var mainBackFrame = new RectangleF(8, 9, 98, 128);
        whiteBackgroundImage = new UIImageView(mainBackFrame);
        whiteBackgroundImage.Image = ImageCache.GetResourceImage("Images/Login/Singlewhite.png");
        wrapperControl.AddSubview(whiteBackgroundImage);

        var imageFrame = new RectangleF(13, 15, 87, 116);

        clickHelper = UIButton.FromType(UIButtonType.Custom);
        clickHelper.Frame = imageFrame;
        wrapperControl.AddSubview(clickHelper);

        userImage = new UIImageView(imageFrame);
        AddSubview(userImage);

        var mitarbeiterlabelFrame = new RectangleF(-12, 137, 140, 25);
        mitarbeiterNameLabel = new FontSizeLabel(mitarbeiterlabelFrame);
        mitarbeiterNameLabel.TextAlignment = UITextAlignment.Center;
        mitarbeiterNameLabel.Font = UIFont.SystemFontOfSize(12);
        mitarbeiterNameLabel.Opaque = false;
        mitarbeiterNameLabel.BackgroundColor = UIColor.Clear;
        AddSubview(mitarbeiterNameLabel);

        var benutzerlabelFrame = new RectangleF(mitarbeiterlabelFrame.X, mitarbeiterlabelFrame.Y + 13, 140, 25);
        benutzerNameLabel = new FontSizeLabel(benutzerlabelFrame);
        benutzerNameLabel.TextAlignment = UITextAlignment.Center;
        benutzerNameLabel.Font = UIFont.SystemFontOfSize(10);
        benutzerNameLabel.Opaque = false;
        benutzerNameLabel.BackgroundColor = UIColor.Clear;
        benutzerNameLabel.TextColor = UIColor.DarkGray;
        AddSubview(benutzerNameLabel);
    }

    public void AddTarget(NSObject target, Selector action, UIControlEvent controlEvents)
    {
        clickHelper.AddTarget(target, action, controlEvents);
    }

    public void RemoveTarget(NSObject target, Selector action, UIControlEvent controlEvents)
    {
        clickHelper.RemoveTarget(target, action, controlEvents);
    }
}
公共类LoginViewController:UIViewController
{
... 
公共覆盖无效ViewDidLoad()
{
...
BuildUserUI();
...
}
私有void BuildUserUI()
{
currentIconLocation=新的点F(50,10);
对于(var i=0;iscrollView.Frame.Size.Width)
{
currentIconLocation.Y+=imgFrame.Size.Height;
currentIconLocation.X=50;
}
}
[导出(“ShowNumberPad:”)]
私有void ShowNumberPad(NSObject发送方)
{
...
}
}
公共类UILoginImage:UIView
{
[导出(“initWithFrame:”)]
公共UILoginImage(矩形框架)
:底座(框架)
{
var shadowFrame=新矩形f(0,0,117,148);
包装控制=新的UIControl(阴影帧);
AddSubview(包装器控件);
shadowImage=新UIImageView(阴影帧);
shadowImage.Image=ImageCache.GetResourceImage(“Images/Login/LoginSchatten.png”);
wrapperControl.AddSubview(阴影图像);
var main backframe=新矩形F(8,9,98,128);
whiteBackgroundImage=新的UIImageView(主后框);
whiteBackgroundImage.Image=ImageCache.GetResourceImage(“Images/Login/Singlewhite.png”);
AddSubview(whiteBackgroundImage);
var imageFrame=新矩形F(13,15,87,116);
单击Helper=UIButton.FromType(UIButtonType.Custom);
单击Helper.Frame=imageFrame;
wrapperControl.AddSubview(单击Helper);
userImage=新的UIImageView(imageFrame);
AddSubview(userImage);
var mitarbeiterlabelFrame=新矩形F(-12,137,140,25);
mitarbeiterNameLabel=新的FontSizeLabel(mitarbeiterlabelFrame);
mitarbeiterNameLabel.TextAlignment=UITextAlignment.Center;
mitarbeiterNameLabel.Font=UIFont.SystemFontOfSize(12);
mitarbeiterNameLabel.不透明=假;
mitarbeiterNameLabel.BackgroundColor=UIColor.Clear;
添加子视图(mitarbeiterNameLabel);
var benutzerlabelFrame=新的矩形f(mitarbeiterlabelFrame.X,mitarbeiterlabelFrame.Y+13140,25);
benutzerNameLabel=新的FontSizeLabel(benutzerlabelFrame);
benutzerNameLabel.TextAlignment=UITextAlignment.Center;
benutzerNameLabel.Font=UIFont.SystemFontOfSize(10);
benutzerNameLabel.不透明=假;
benutzerNameLabel.BackgroundColor=UIColor.Clear;
benutzernamelab.TextColor=UIColor.DarkGray;
AddSubview(benutzerNameLabel);
}
public void AddTarget(NSObject目标、选择器操作、uicontrol事件控制事件)
{
单击Helper.AddTarget(目标、操作、控制事件);
}
public void RemoveTarget(NSObject目标、选择器操作、uicontrol事件控制事件)
{
单击Helper.RemoveTarget(目标、操作、控制事件);
}
}

我不确定使用
AddTarget
是否是连接
ui按钮的好方法

您应该使用
clickHelper.TouchUpInside
连接单击事件。这是一个标准的C#事件


另一种选择是在XCode中的XIB文件中连接此事件的操作。

当不再引用某个实例(例如,
UIButton
)并且GC收集该实例时,可能会发生这种情况。但是,如果没有看到源代码,就不可能确认它。