Ich versuche, ein Tutorial für eine C++-Schnittstelle in der Mac OS X-API (Audio Queue Services) zu folgen, aber in einem Cocoa (gut, eigentlich nur Foundation) Anwendung (gut, eigentlich nur ein "Werkzeug"). Es hat eine Struktur, die wie folgt aussieht:
static const int kNumberBuffers = 3; // 1
struct AQPlayerState {
AudioStreamBasicDescription mDataFormat; // 2
AudioQueueRef mQueue; // 3
AudioQueueBufferRef mBuffers[kNumberBuffers]; // 4
AudioFileID mAudioFile; // 5
UInt32 bufferByteSize; // 6
SInt64 mCurrentPacket; // 7
UInt32 mNumPacketsToRead; // 8
AudioStreamPacketDescription *mPacketDescs; // 9
bool mIsRunning; // 10
};
Ich habe eine Menge Probleme mit der Übersetzung von Artikel 4 in Objective-C, weil ich nicht herausfinden kann, wie man @synthesize
ein C-Array. Genauer gesagt, das ist, was ich bis jetzt habe:
PlayerState.h
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioQueue.h>
@interface PlayerState : NSObject {
AudioStreamBasicDescription dataFormat;
AudioQueueRef queue;
AudioQueueBufferRef _buffers[3];
int audioFile; // make this an actual type?
UInt32 bufferByteSize;
SInt64 currentPacket;
UInt32 numPacketsToRead;
AudioStreamPacketDescription* packetDescs;
bool isRunning;
}
@property(assign) AudioStreamBasicDescription dataFormat;
@property(assign) AudioQueueRef queue;
@property(assign) AudioQueueBufferRef buffers;
@property(assign) int audioFile;
@property(assign) UInt32 bufferByteSize;
@property(assign) SInt64 currentPacket;
@property(assign) UInt32 numPacketsToRead;
@property(assign) AudioStreamPacketDescription* packetDescs;
@property(assign) bool isRunning;
@end
PlayerState.m
#import "PlayerState.h"
@implementation PlayerState
@synthesize dataFormat;
@synthesize queue;
@synthesize buffers;
@synthesize audioFile;
@synthesize bufferByteSize;
@synthesize currentPacket;
@synthesize numPacketsToRead;
@synthesize packetDescs;
@synthesize isRunning;
@end
@synthesize buffers
lässt sich wie folgt nicht kompilieren: "Fehler: Die synthetisierte Eigenschaft 'buffers' muss entweder den gleichen Namen wie ein kompatibles Ivar haben oder explizit ein Ivar benennen"
Dies liegt offensichtlich daran, dass das entsprechende Ivar den Namen _buffers
und nicht buffers
- aber das ist notwendig, weil ich eine Eigenschaft nicht als Array definieren kann (oder doch? @property(assign) *AudioQueueBufferRef buffers
ist ein Syntaxfehler)
Was kann ich tun, um entweder die ivar als ein Array von AudioQueueBufferRef
structs, oder synthetisieren Sie die Eigenschaft so, dass sie sich auf die _buffers
Array?