2014-11-04 2 views
0

Мой симулятор iOS падает, когда я пытаюсь использовать UITapGestureRecognizer.UITapGestureRecognizer Crashes on iOS Simulator

Это мой жест:

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

Я добавляю этот жест в UIView, а затем добавить эту точку зрения к UITableViewCell. Приложение падает после касания вида (каждый раз), не отображая «Исключение».

Her является выход из симулятора файла журнала:

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 

Что я могу сделать сейчас? Я не хочу, чтобы разработать на устройстве ...

EDIT

Я закончил тем, что переопределение UIView и использовать его TouchesBegan() метод. Есть много подходов, чтобы сделать что-то кликабельным, но почему я не могу использовать это выше?

+0

Вы пытались добавить tapgesture, созданный с помощью конструктора, который принимает селектор в качестве аргумента? – user3455363

+0

Да, я пробовал это, но это, к сожалению, не решает мою проблему, потому что мне нужен Жест с делегатом в том же Контексте, где был создан Gesture. –

ответ

1

Вот немного кода, I'am использованием в моем приложении

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 будет ссылкой вашего представления, если метод, который вы хотите вызвать, например, в ячейке, ваша ссылка на ячейку будет целевой.

EDIT

Основываясь на комментарии, я предположил, что вы можете использовать UITableViewSource. Я думаю, что ваш случай похож на мой, поэтому попробуйте этот подход:

Объявите событие в вашем UITableSource что-то вроде
public event EventHandler<DataBaseModels.SavedActions> OnActionSelected;
Затем в getCell назначьте жест выделения жесткости вашему представлению и внутри метода, вы будете иметь ссылку на отправителя objec, отбросите его в UIView и сохранить тег для идентификации соответствующей записи

+0

Я пробовал это сейчас, но я внутри StringElement (MonoTouch.Dialog), и, видимо, я не могу использовать его как цель (NSObject). Но я действительно уверен, что сделал это в прошлом ... –

+0

Хорошо, это работает (в Simulator), но непрактично, я должен передать ссылку на свою ячейку, и я должен найти способ определить, какой из них был использован ... На моем устройстве я получаю исключение исключенного исключения. Что не так с конструкцией NSAction для Жесты? –