Установка self.window.rootViewController вызывает SIGABRT - PullRequest
7 голосов
/ 24 февраля 2011

Я пытаюсь создать приложение, в котором вы нажимаете кнопку, затем появляется UIAlertView и в нем есть UIView с 3 пользовательскими кнопками. Пока все работает. Когда я нажимаю на одну из 3 кнопок, я хочу изменить изображение UIImageView, и это также работает. Проблема в том, что из ниоткуда теперь происходит sigabrt каждый раз, когда я пытаюсь запустить свои приложения.

* * * SIGABRT происходит в моем AppDelegate.m в этой строке:

self.window.rootViewController = self.viewController;

Если кто-то может мне помочь, это было бы здорово, и, кстати, я не очень привык к xcode и target-c, так что я понятия не имею, почему это происходит.

Вот мой viewController.h

#import UIKit/UIKit.h (i removed < > cause they were hiding everything inbetween in the post.)

@interface savingstatusViewController : UIViewController {

    UIView *loginView;
    UIImageView *statusImage;
    UIAlertView * MyTicketAlert;

}

- (IBAction)status:(id)sender;

@property (nonatomic, retain) IBOutlet UIView *loginView;    
@property (nonatomic, retain) IBOutlet UIImageView *statusImage;
@property (nonatomic, retain) IBOutlet UIAlertView * MyTicketAlert;

- (IBAction)green:(id)sender;
- (IBAction)yellow:(id)sender;
- (IBAction)red:(id)sender;

@end

Вот мой viewController.m

#import "savingstatusViewController.h"

@implementation savingstatusViewController

@synthesize loginView;
@synthesize statusImage,MyTicketAlert;

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

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

 #pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [self setLoginView:nil];
    [self setStatusImage:nil];
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}

- (IBAction)status:(id)sender
{
    MyTicketAlert = [[UIAlertView alloc] initWithTitle:nil message:nil  delegate:self cancelButtonTitle:nil
                                     otherButtonTitles: nil];
    [MyTicketAlert addSubview:loginView];
    [MyTicketAlert show];
    MyTicketAlert.frame = CGRectMake(0, 1000, 440, 110);
}

- (IBAction)green:(id)sender 
{
    statusImage.image = [UIImage imageNamed:@"etat_controle.png"];

     [MyTicketAlert dismissWithClickedButtonIndex:0 animated:YES];
}

- (IBAction)yellow:(id)sender
 {
    statusImage.image = [UIImage imageNamed:@"etat_attention.png"];

     [MyTicketAlert dismissWithClickedButtonIndex:0 animated:YES];
}

- (IBAction)red:(id)sender
 {
    statusImage.image = [UIImage imageNamed:@"etat_danger.png"];

     [MyTicketAlert dismissWithClickedButtonIndex:0 animated:YES];
}

@end

Ответы [ 3 ]

5 голосов
/ 06 июля 2011

UIWindow rootViewController свойство не существует до iOS4. Если вы попытаетесь запустить этот код на устройстве с iOS 3 или более ранней версии, он вылетит.

В вашем AppDelegate вы можете использовать вместо него addSubview.

//self.window.rootViewController = self.viewController; // Only iOS >= 4
[self.window addSubview:self.viewController.view];
[self.window makeKeyAndVisible];
return YES;
4 голосов
/ 13 августа 2011

Это также происходит, если представление владельца файла не было установлено или установлено неправильно.Убедитесь, что свойство представления «Владелец файла» вашего ViewController.xib установлено на ваше представление.Мне понадобилось время, чтобы понять это!

2 голосов
/ 07 апреля 2011

перейдите к «TheNameOfYourProjetdelegate» в MainWindow.xib.

В «точках» «TheNameOfYourProjetdelegate» у вас должен быть viewController, затем «перетащите элемент управления» в ваше окно и запустите ваше приложение

...