Программа получила сигнал: "EXC_BAD_ACCESS" - PullRequest
0 голосов
/ 18 апреля 2011

Я смотрел на другие подобные вопросы, но не могу найти помощь.Когда я нажимаю кнопку, которая должна воспроизводить звук, приложение вылетает.Вот консоль отладки:

Отладчик вышел с состоянием 0.
[Сессия началась в 2011-04-18 18:07:56 +0800.]
GNU gdb 6.3.50-20050815 (версия Apple gdb-1515) (суббота, 15 января 08:33:48 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB - свободное программное обеспечение, на которое распространяется Стандартная общественная лицензия GNU,и вы
можете изменять его и / или распространять его копии при определенных условиях.
Введите «показать копирование», чтобы просмотреть условия.
На GDB нет абсолютно никаких гарантий.Для получения подробной информации введите «показать гарантию».
Эта GDB была настроена как «x86_64-apple-darwin» .sharedlibrary apply-load-rules all Присоединение к процессу 3814.
Программа получила сигнал: «EXC_BAD_ACCESS».
(gdb)

Это была консоль отладчика.

Вот мое кодирование:

AppDelegate.h

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


@interface MathAppDelegate : NSObject <UIApplicationDelegate> {
    AVAudioPlayer* sound;
    UIWindow *window;
    UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

-(IBAction)play;

@end

AppDelegate.m

#import "MathAppDelegate.h"
#import "MainMenuViewController.h"

@implementation MathAppDelegate
@synthesize window;

-(IBAction)play {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"M1" ofType:@"aif"];
    AVAudioPlayer *sound = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:path] error:NULL];
    sound.delegate = self;    ("I get an error here saying 'Local declaration of 'sound' hides instance variable") and ("Class 'MathAppDelegate' does not implement the AVAudioPlayerDelegate' protocol")
    [sound play];  ("I get an error here saying 'Local declaration of 'sound' hides instance variable'")
}

Я подключил кнопку к действию в Интерфейсном Разработчике.Что заставляет меня чувствовать, что это испортилось, так это то, что мне пришлось перетащить объект делегата приложения из mainwindow.xib в mainmenuviewcontroller.xib, потому что именно там мне нужно было нажать кнопку.Это все еще связано, хотя.

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Самое простое решение - заставить ваши действия кнопок указывать на действия, доступные в объектах в той же XIB. Таким образом, вы, вероятно, хотите подключить действие воспроизведения в вашем контроллере главного меню к владельцу файла, в данном случае, вероятно, к вашему MainMenuViewController объекту. Я просто переместил бы действие воспроизведения и связанный код в этот файл.

Делегат приложения был контроллером объекта в вашем MainWindow.xib и настроен как делегат для окна в том же файле. Так как вы переместили его в другой xib, делегат вашего окна теперь указывает на несуществующий объект. Это может объяснить падение.

0 голосов
/ 23 марта 2012

Программный полученный сигнал: «EXC_BAD_ACCESS».

database1AppDelegate *appDelegate = (database1AppDelegate*)[[UIApplication sharedApplication]delegate];
singleStudent *sStudent = [appDelegate.aryDatabase objectAtIndex:indexPath.row];
cell.textLabel.text = [sStudent strName];
...