2012-04-11 4 views
2

У меня есть navigationController, который имеет представление с некоторыми кнопками, но когда я нажимаю кнопку, я получаю ошибку EXC_BAD_ACCESS. Я не могу думать, что я делаю неправильно, поскольку цель настроена правильно. Он падает, если кнопка добавлена ​​программно или через IB.UIButton crashing app on touch

Кнопка Код:

UIButton *reportsButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
reportsButton.frame = CGRectMake(20, 100, 100, 50); 
[reportsButton setTitle:@"Reports" forState:UIControlStateNormal]; 
[reportsButton addTarget:self action:@selector(reportsButtonTouched:) forControlEvents:UIControlEventTouchUpInside]; 

Кнопка Функция пытается получить доступ:

- (void)reportsButtonTouched:(id)sender 
{ 
    NSLog(@"working"); 
} 

Ошибка:

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); //EXC_BAD_ACCESS code=1 
} 

Функция кнопки пытается получить доступ существует.

Возможно, это что-то о том, как функции NavigationController я не знаю, но я сделал это раньше, без каких-либо проблем.

Спасибо за любые ответы, я действительно ценю помощь, которую я получил с этого сайта раньше.

EDIT: Это мой AppDelegates didFinishLaunching incase, который помогает в любом случае.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    UIViewController *homevc = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; 

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:homevc]; 

    [self.window addSubview:nav.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

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

+0

Куда его положить? Приложение сработает, когда кнопка нажата, а остальная часть кода просто добавляет различные другие элементы пользовательского интерфейса подвью. – NinjaLikesCheez

ответ

1

Я также получаю эту ошибку; Я программировал с помощью SpriteKit и реализовал свои кнопки определенным образом, а затем, когда я вернулся к тому, чтобы не использовать фреймворк, внезапно каждая введенная мной кнопка вызывала ошибку плохого доступа.

Я узнал, что инициализировал свои кнопки в viewDidLoad, потому что я использовал didMoveToView, и я случайно относился к ним как к той же функции (что, честно говоря, я действительно не уверен, что на самом деле viewDidLoad делает).

Но когда я сделал это:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) 
{ 
    // Custom initialization 
    [self addButton]; 

} 
return self; 
} 


- (void)addButton 
{ 
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 45, 45)]; 

[button setTitle:@"CLICK" forState:UIControlStateNormal]; 


[button addTarget:self action:@selector(buttonPressed:) 
forControlEvents:UIControlEventTouchDown]; 

[self.view addSubview:button]; 
} 

- (void)buttonPressed:(UIButton *)button 
{ 
    NSLog(@"WORKED"); 
} 

Все работало отлично ... Так что попробуйте, если вы все еще возникают проблемы. Удачи!

+0

Спасибо, это было давно, я не помню, что я сделал, чтобы заставить его работать! – NinjaLikesCheez

4

Ничто в коде не указывает на какие-либо проблемы. Use this tutorial, чтобы сделать Xcode break на всех исключениях. Это приблизит вас к «сцене преступления», а не к краху.

+0

Сделаю это сейчас, спасибо! – NinjaLikesCheez