[FIXED] Bad Access Code 1 mit einfachem NSObject

Ausgabe

Ich erstelle ein benutzerdefiniertes Objekt, es ist derzeit sehr einfach. Unten finden Sie meine .h für das Objekt.

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

@interface LAZMessagePlayer : NSObject <AVAudioPlayerDelegate>

- (void)play:(UIView*)viewThatWasPressed;
- (void)pause;
- (BOOL)isPlaying;
@end

und das entsprechende .m für das Objekt

#import "LAZMessagePlayer.h"
@implementation LAZMessagePlayer {
    AVAudioPlayer* myPlayer;
    UIView* currentViewPlaying;
}

-(id)init{
    NSLog(@"init audio");
    NSURL* src = [NSURL fileURLWithPath:[NSString stringWithFormat:@"/Users/Developer/Downloads/317.mp3", [[NSBundle mainBundle] resourcePath]]];
    NSError* error;
    myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:src error:&error];
}

-(void)play:(UIView*)viewThatWasPressed {
    NSLog(@"play");
    currentViewPlaying = viewThatWasPressed;
    currentViewPlaying.hidden = YES;
    [myPlayer play];
}

-(void)pause {
    NSLog(@"pause");
    currentViewPlaying.hidden = NO;
    [myPlayer pause];
}

-(void)audioPlayerDidFinishPlaying:
(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"done");
    currentViewPlaying.hidden = NO;
}

-(BOOL)isPlaying {
    return myPlayer.playing;
}

@end

In meinem ViewController habe ich eine private Variable oben in meinem Controller.m so deklariert,

#import "LAZMessagesViewController.h"
@interface LAZMessagesViewController () {
    LAZMessagePlayer* myPlayer;
}

In meinem ViewDidLoad ordne/initiere ich meinenPlayer.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationBarExtensionViewDelegate = self;
    // Do any additional setup after loading the view.
    myPlayer = [[LAZMessagePlayer alloc] init];
}

Später in meinem Tap-Handler erhalte ich einen BAD ACCESS-Code = 1, wenn ich das erste Mal versuche, auf myPlayer zu verweisen, hier ist die erste Zeile, die umbricht

if([myPlayer isPlaying])...

Ich bin mit der Speicherverwaltung von C++ vertraut, aber neu in Objective-C. Kann bitte jemand auf meinen offensichtlichen Fehler hinweisen.

Vielen Dank.

Lösung

Habe es selbst gelöst. Innerhalb von Object.h brauchte ich:

self = [super init];
.
.
.
return self;


Beantwortet von –
tpdietz


Antwort geprüft von –
Clifford M. (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like