2017-09-25 10 views
0

私は、1からオーディオストリーミングを使用するプロジェクトを作成しようとしています。このために、私はプラグインを開発しています。Objective-C - BAD ACCESS EXC

録音時に音声は問題ありません。私はbase64文字列でwebsocketを通してデータを送信します。 その後、xcodeからそれを捕捉してNSDATAに変換します。それが問題です。最初は問題はありませんが、しばらくしてからXcodeはエラーEXC_BAD_ACCESSを表示し、バッファにNSDATAをコピーし続けることができません。

ここにコードがあります。

#import "AudioProcessor.h" 

#pragma mark Playback callback 

static OSStatus playbackCallback(void *inRefCon, 
          AudioUnitRenderActionFlags *ioActionFlags, 
          const AudioTimeStamp *inTimeStamp, 
          UInt32 inBusNumber, 
          UInt32 inNumberFrames, 
          AudioBufferList *ioData) { 


AudioProcessor audioProcessor = (AudioProcessor) inRefCon; 

// copy buffer to audio buffer which gets played after function return 
if(ioData->mNumberBuffers > 0) { 

    AudioBuffer buffer = ioData->mBuffers[0]; 

    // get the data from Unity 
    NSString *inputData = audioProcessor.getInputData; 

    if(inputData && ![inputData isKindOfClass:[NSNull class]]) 
    { 

     //here it's the problem. 
     NSData *data = [[NSData alloc] initWithBase64EncodedString:inputData options:0]; 

     memcpy(buffer.mData, data.bytes, data.length); 
     buffer.mDataByteSize = (int) data.length; 
     free(data); 
    } 

return noErr; 
} 

#pragma mark controll stream 

-(void)setInputData:(NSString *)datosValue 
{ 
    inputData = datosValue; 
} 

-(NSString*)getInputData 
{ 
    return inputData; 
} 

誰かがアプリケーションが終了しないようにする方法を知っていれば、私はそれを感謝します。

+0

例えばドット表記でプロパティにアクセスすることをお勧めしますさらに*

NSData *data = [[NSData alloc] init.... 

を追加する必要がありますあなたがどこに間違っているのかを検出するための皮肉な方法は、xcodeからゾンビオブジェクトを有効にします。すでにリリースされているオブジェクトにアクセスしようとするために発生します。 – Govaadiyo

答えて

1

最初に、変数名が小文字で始まる命名規則に従ってください。 NSDataのインスタンスは、オブジェクト/ポインタであるため、

エラーが発生すると、あなたは非常に

data.bytes 
data.length 
+0

スタイルエラーに対処している場合は、 'audioProcessor.getInputData'も注意してください.-実際のObjective-Cゲッターは名詞です。動詞は含まれていません。クラスに何をすべきかを教えないで、何かを求めています。しかしそれは望みどおりに実装することができます。 – Tommy

+0

私はあなたが言うことをしましたが、問題は続きます。 NSData * data = [[NSData alloc] initWithBase64EncodedString:InputDataオプション:0]; memcpy(buffer.mData、data.bytes、data.length); buffer.mDataByteSize =(int)data.length; 空き(データ); ' –