0

私が構築しているiPhoneアプリケーション用のObjective-Cのシンセサイザーであるこのプロジェクトを使用しようとしています。MHAudioBufferPlayerでも、授業で悩んでいます。

MHAudioBufferPlayer.mクラスで、、、およびに対して大量のUse of undeclared identifierエラーが発生しています。これらの識別子は前にアンダースコアを付けて宣言されることはないため、これは理にかなっています。ただし、アンダースコアなしでクラスで宣言されています。_gain_playing_audioFormatMHAudioBufferPlayer.h

私はObjective-Cが初めてなので、これにはちょっと混乱しています。下線は特別なアクションを意味しますか? self.gain、などに翻訳されることになっていself.playingますか? どうすればこれを修正できますか? それとも、このコードはただのバグですか?

- (id)initWithSampleRate:(Float64)sampleRate channels:(UInt32)channels bitsPerChannel:(UInt32)bitsPerChannel packetsPerBuffer:(UInt32)packetsPerBuffer
{
    if ((self = [super init]))
    {
        _playing = NO;
        _playQueue = NULL;
        _gain = 1.0;

        _audioFormat.mFormatID         = kAudioFormatLinearPCM;
        _audioFormat.mSampleRate       = sampleRate;
        _audioFormat.mChannelsPerFrame = channels;
        _audioFormat.mBitsPerChannel   = bitsPerChannel;
        _audioFormat.mFramesPerPacket  = 1;  // uncompressed audio
        _audioFormat.mBytesPerFrame    = _audioFormat.mChannelsPerFrame * _audioFormat.mBitsPerChannel/8;
        _audioFormat.mBytesPerPacket   = _audioFormat.mBytesPerFrame * _audioFormat.mFramesPerPacket;
        _audioFormat.mFormatFlags      = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;

        _packetsPerBuffer = packetsPerBuffer;
        _bytesPerBuffer = _packetsPerBuffer * _audioFormat.mBytesPerPacket;

        [self setUpAudio];
    }
    return self;
}
4

3 に答える 3

0

@synthesize Xcode => 4.4 によってデフォルトで生成されます。独自の @synthesize ステートメントを明示的に作成しない場合、Xcode によって作成された生成されたプライベート インスタンス変数 ivar には、先頭にアンダースコア ' ' が付きます。このプロパティにメッセージを送信するときは、先頭の ' ' を含める必要があります (通常、controller.m ファイルからのアウトレットとしての UI 要素)。

あれは

@プロパティテキストフィールド;

[_textField setStringValue: @"foo"]; 「@synthesize」を書かない場合。

コンパイラがこれを行い、getter/setter を合成してプライベート インスタンス変数を作成しました。慣例では、プライベート ivar を先頭にアンダースコアを付けたプロパティの名前にします。

また

@synthesize textField; @プロパティテキストフィールド; [textField setStringValue: @"foo"]; 独自の「@synthesize」を作成するか、Xcode 4.4未満の場合。

ここでは、コンパイラはあなたのためにそれを行っていません.ivar名/プロパティ名は同じで、先頭の「_」なしで使用できます.

幸運を。

于 2013-04-16T20:10:04.510 に答える