2013-10-28 2 views
5

Резюме
Это мое первое приложение, которое я пытаюсь сделать с помощью Xamarin. Я изучаю пример Hello World, iPhone. Когда я нажимаю на кнопку, приложение падает, и я не могу понять, почему.Приложение iOS падает, когда я нажимаю на свой UIButton - не могу понять, почему?

Детали
У меня есть простой UIViewController с одной UIButton. Я создал выход, поэтому, когда я нажимаю на кнопку, я что-то делаю.

Когда я подключаю кнопку TouchUpInside event кнопки, приложение падает, когда я нажимаю кнопку. Когда я удаляю проводное событие (но выход все еще существует), приложение не падает, когда я нажимаю кнопку. (Конечно, ничего не происходит, потому что ничего не подключено).

Что убивает меня, так это то, что я понятия не имею, что не так, и используя информацию об отладке, я не могу понять это! Я делаю код C# уже много лет, но только начинать с Xam немного по-другому, особенно когда отчет о сбоях ... ну .. отсутствует какая-либо информация :(Я предполагаю, что у меня могут быть некоторые настройки, отмеченные галочкой (например. нет информации отладки?)

Так вот нет какой-то код ...

AuthenticationViewController
файл .h

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 


@interface AuthenticationViewController : UIViewController { 
UIButton *_Google; 
} 

@property (nonatomic, retain) IBOutlet UIButton *Google; 

@end 

.m файл

#import "AuthenticationViewController.h" 

@implementation AuthenticationViewController 

@synthesize Google = _Google; 

@end 

дизайнер файл

using MonoTouch.Foundation; 
using System.CodeDom.Compiler; 

namespace Foo.Client.iPhone 
{ 

    [Register ("AuthenticationViewController")] 
    partial class AuthenticationViewController 
    { 
     [Outlet] 
     MonoTouch.UIKit.UIButton Google { get; set; } 

     void ReleaseDesignerOutlets() 
     { 
      if (Google != null) { 
       Google.Dispose(); 
       Google = null; 
      } 
     } 
    } 
} 

и, наконец, мои

.cs файл

using System; 
using System.Drawing; 
using MonoTouch.Foundation; 
using MonoTouch.UIKit; 

namespace Foo.Client.iPhone 
{ 
    public partial class AuthenticationViewController : UIViewController 
    { 
     public int xxx = 0; 
     public event EventHandler OnAuthenticationCompleted; 

     public AuthenticationViewController() 
      : base ("AuthenticationViewController", null) 
     { 
     } 

     public override void DidReceiveMemoryWarning() 
     { 
      // Releases the view if it doesn't have a superview. 
      base.DidReceiveMemoryWarning(); 

      // Release any cached data, images, etc that aren't in use. 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      Google.TouchUpInside += (sender, e) => 
      { 
       xxx++; 
      }; 
     } 
    } 
} 

Oh - и деньги выстрел ... (не хватает) аварийный сброс/трассировка трассировки

2013-10-25 21:37:13.785 FooClientiPhone[8852:1403] MonoTouch: Socket error while connecting to MonoDevelop on 127.0.0.1:10000: Connection refused 
mono-rt: Stacktrace: 

mono-rt: at <unknown> <0xffffffff> 

mono-rt: at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff> 

mono-rt: at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 

mono-rt: at Foo.Client.iPhone.Application.Main (string[]) [0x00008] in /Users/PureKrome/Documents/Mac Projects/Foo iOS Client/Code/Foo.Client.iPhone/Main.cs:16 

mono-rt: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 

mono-rt: 
    Native stacktrace: 

mono-rt: 
    ================================================================= 
    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. 
      ================================================================= 

Я застрял и понятия не имею, как продолжить? Я уже провел несколько часов, пытаясь разобраться в этом.

Далее, here's a video showing the error (пожалуйста, выберите версию 720p).

и вот solution, zipped up.

Буду признателен за любую помощь -> и не сказать: вот оно, исправлено. но .. вы не сделали этого и этого .. и вам нужно делать эти вещи, чтобы xxxx работал.

Любые предложения, пожалуйста?

+0

Возникла ли ошибка при запуске приложения без отладки? –

+0

Да. это также происходит. –

ответ

5

Посмотрите на это с точки зрения xCode. Я думаю, что IBOutlet приводит к сбою приложения. Просто потому, что IBOutlets используются для состояний, а не для вызовов методов.В этом случае, вы должны подключить кнопку к IBAction:

- (IBAction)Google:(id)sender; 

, который в конечном счете называют:

Google.TouchUpInside += (sender, e) => 
      { 
       xxx++; 
      }; 

Кроме того, обратите внимание, что в современной Objective-C вам не нужно @synthesize Google = _Google;, что будет происходить автоматически.

happy x (amarin) Coding.

1

вы пишете много кода для простого привета мира

это то, что вам не нужно

@property (nonatomic, retain) IBOutlet UIButton *Google; 
@synthesize Google = _Google; 

using MonoTouch . Foundation ; 
using System . CodeDom . Compiler ; 

namespace Foo . Client . iPhone 
{ 

[ Register ("AuthenticationViewController")] 
partial class AuthenticationViewController 
{ 
    [ Outlet ] 
    MonoTouch . UIKit . UIButton Google { get ; set ; } 

    void ReleaseDesignerOutlets () 
    { 
     if (Google != null) { 
      Google . Dispose (); 
      Google = null ; 
     } 
     } 
    } 
    } 
    using System; 
    using System.Drawing; 
    using MonoTouch.Foundation; 
    using MonoTouch.UIKit; 

    namespace Foo.Client.iPhone 
{ 
public partial class AuthenticationViewController : UIViewController 
{ 
    public int xxx = 0; 
    public event EventHandler OnAuthenticationCompleted; 

    public AuthenticationViewController() 
     : base ("AuthenticationViewController", null) 
    { 
    } 

    public override void DidReceiveMemoryWarning() 
    { 
     // Releases the view if it doesn't have a superview. 
     base.DidReceiveMemoryWarning(); 

     // Release any cached data, images, etc that aren't in use. 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     Google.TouchUpInside += (sender, e) => 
     { 
      xxx++; 
     }; 
    } 
    } 
    } 2013-10-25 21:37:13.785 FooClientiPhone[8852:1403] MonoTouch: Socket error while   connecting to MonoDevelop on 127.0.0.1:10000: Connection refused 
    mono-rt: Stacktrace: 

    mono-rt: at <unknown> <0xffffffff> 

    mono-rt: at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain   (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff> 

    mono-rt: at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 

    mono-rt: at Foo.Client.iPhone.Application.Main (string[]) [0x00008] in /Users/PureKrome/Documents/Mac Projects/Foo iOS Client/Code/Foo.Client.iPhone/Main.cs:16 

mono-rt: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object   (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 

    mono-rt: 
    Native stacktrace: 
    mono-rt: 
    ================================================================= 
    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. 
     ================================================================= 

Так что, если вы сделаете мир привета с кнопкой Нет необходимости какой-либо из этого

Чтобы сделать привет мир нуждается только в этом

@interface ViewController() 


@property (nonatomic, strong) UILabel *myLabel; 



@implementation ViewController 

- (IBAction)myButton:(id)sender 
{ 
    _myLabel.Text = @"Hello World "; 
} 
@end 
+2

Удаление ненужного кода всегда хорошо. Но, возможно, обманщик нуждался в этом, и это вызвало крах. Любые идеи или комментарии о том, что могло вызвать крах? – Trilarion

1

T он говорит нам, возможно, мы теряем ссылку на что-то. Я знаю, что кто-то уже сказал, чтобы включить зомби, но это может быть не вариант с вашей оберткой/компилятором.

mono-rt: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff> 

Попробуйте заменить:

@interface AuthenticationViewController : UIViewController { 
    UIButton *_Google; 
} 

@property (nonatomic, retain) IBOutlet UIButton *Google; 

С просто:

@interface AuthenticationViewController : UIViewController 
@property (nonatomic, retain) IBOutlet UIButton *Google; 

Возможно, компилятор не знает, что вы говорите, когда вы нажимаете эту кнопку.

Смежные вопросы