2014-11-04 194 views
0

当我尝试使用UITapGestureRecognizer时,我的iOS模拟器崩溃。iOS模拟器上的UITapGestureRecognizer崩溃

这是我的手势:

UITapGestureRecognizer tap = new UITapGestureRecognizer (new NSAction(delegate { 
    if(SettingsTapped != null){ 
    SettingsTapped(this, EventArgs.Empty); 
    } 
})); 

我加入这个手势一个UIView,然后添加该视图一个UITableViewCell。 触摸视图(每次)后该应用程序崩溃,显示没有例外。

她是从模拟器的日志文件输出:

Nov 4 10:49:47 administorsmini xXxXx[11073]: assertion failed: 13E28 12B411: libsystem_sim_trace.dylib + 19982 [BEE53863-0DEC-33B1-BFFB-8F7AE595CC73]: 0x4 
Nov 4 10:49:49 administorsmini xXxXx[11073]: Stacktrace: 
Nov 4 10:49:49 administorsmini xXxXx[11073]: at <unknown> <0xffffffff> 
Nov 4 10:49:49 administorsmini xXxXx[11073]: at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x000a6, 0xffffffff> 
Nov 4 10:49:49 administorsmini xXxXx[11073]: at MonoTouch.UIKit.UIApplication.Main (string[],intptr,intptr) [0x00005] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:62 
Nov 4 10:49:49 administorsmini xXxXx[11073]: at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00038] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:46 
Nov 4 10:49:49 administorsmini xXxXx[11073]: at xXxXx.Application.Main (string[]) [0x00008] in /Users/Norman/Desktop/xXxXx/xXxXx/Main.cs:17 
Nov 4 10:49:49 administorsmini xXxXx[11073]: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 
Nov 4 10:49:49 administorsmini xXxXx[11073]: 
Native stacktrace: 
Nov 4 10:49:49 administorsmini xXxXx[11073]: 
================================================================= 
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. 
================================================================= 
Nov 4 10:49:49 administorsmini com.apple.CoreSimulator.SimDevice.27B5D497-B641-4BCA-8FA0-EF9E28E07143.launchd_sim[10951] (UIKitApplication:com.your-company.xXxXx[0x7041][11073]): Service exited due to signal: Abort trap: 6 
Nov 4 10:49:49 administorsmini SpringBoard[10962]: Application 'UIKitApplication:com.your-company.xXxXx[0x7041]' crashed. 
Nov 4 10:49:49 administorsmini assertiond[10966]: notify_suspend_pid() failed with error 7 
Nov 4 10:49:49 administorsmini assertiond[10966]: assertion failed: 13E28 12B411: assertiond + 11523 [3F572A0B-7E12-378D-AFEE-EA491BAF2C36]: 0x1 

我现在该怎么办? 我不想要开发的设备...

编辑

我最终通过重写的UIView,并使用其TouchesBegan()方法。 有许多方法可以使点击的东西,但我为什么不能只使用这个上面?

+0

您是否试图添加用选择器作为参数的构造函数创建的tapgesture? – user3455363 2014-11-04 10:37:30

+0

是的,我尝试过,但不幸的是不能解决我的问题,因为我需要在创建手势的同一上下文中使用代理的手势。 – 2014-11-04 12:15:24

回答

1

下面是我'用我的应用程序

private void addTapGesture() 
    { 
     imgLogo.UserInteractionEnabled = true; 
     var tapGesture = new UITapGestureRecognizer(this, new Selector("ResendTrigger:")); 
     tapGesture.NumberOfTapsRequired = 5; 
     imgLogo.AddGestureRecognizer(tapGesture);   
    } 
    [Export("ResendTrigger:")] 
    public void ResendTrigger(UIGestureRecognizer sender) 
    { 
     System.Diagnostics.Debug.WriteLine("Triggered");} 

构造函数的第一个参数(这个)指向对象,其中包含与特定属性导出方法的定义,因此,如果您将定义选择的码位和方法在你的视图中NSObject目标将是你的视图的引用,如果你想调用的方法存在于例如单元格中,你的单元格引用将成为目标。

编辑

基于评论我假设你可能正在使用UITableViewSource。我认为你的情况与我的类似,所以试试这种方法:

在你的UITableSource中声明事件
public event EventHandler<DataBaseModels.SavedActions> OnActionSelected;
然后在getCell中为你的视图和内部方法分配点击手势,你将引用sender对象,将其转换为UIView,保留标记以标识相应的记录

+0

我现在试过了,但我在StringElement(MonoTouch.Dialog)里面,显然我不能用它作为目标(NSObject)。但我真的确定我过去做过这样的事情...... – 2014-11-04 11:09:56

+0

好吧,这是工作(在模拟器中),但不切实际,我必须将参考传递给我的单元格,并且我必须找到一种方法来确定哪一个被点击... 在我的设备上,我得到一个无法识别的选择器异常。手势的NSAction构造有什么问题? – 2014-11-04 11:34:40