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)