0

J'ai sous-classé NSOperation et - (void) main est ok, (puisqu'il a fonctionné avant d'utiliser NSOperation), j'ai également passé par la méthode init et les variables sont initialisées correctement. Tout difficile après la - (id) initWithSampleBuffer: est fait et je suis en train d'ajouter le uploadOperation au NSOperationQueue:exc_bad_acccess lors de l'ajout à NSOperationQueue

UploadOperation *ulOp = [[UploadOperation alloc] initWithSampleBuffer:sampleBuffer]; 
[queue addOperation:ulOp]; //here i get exc_bad_access 
[ulOp release]; 

je reçois EXC_BAD_ACCESS. J'ai essayé des points d'arrêt et je peux voir que cette file d'attente existe, tout comme ulOp. Je n'arrive pas à comprendre ce que je fais de mal, puisque, à ma connaissance, exc_bad_access se produit lorsque vous essayez de transmettre un "message" à quelque chose qui est déjà désalloué, et clairement, aucun d'entre eux ne l'est.

- (id)initWithSampleBuffer:(CMSampleBufferRef) aSampleBuffer { 
    sampleBuffer = aSampleBuffer; 

    VideoStreamViewController *vc = [VideoStreamViewController shared]; 
    ul = [[Uploader alloc] initWithURL:[NSURL alloc] filePath:@"" delegate:vc doneSelector:@selector(didFinishUpload:) errorSelector:@selector(uploadFailed:)]; 

    return self; 
} 

mais les choses Uploader, est pas le problème (je l'ai supprimé et encore obtenir le même résultat). et de ce que je peux y voir aucun problème avec l'objet CMSampleBuffer, il est initialisé!

initialisation de la file:

dans .h:

NSOperationQueue *queue; 
@property (nonatomic, retain) NSOperationQueue *queue; 

dans .m:

@synthesize queue; 
self.queue = [[NSOperationQueue alloc] init]; 
[queue setMaxConcurrentOperationCount:1]; 
+1

A quoi ressemble l'initialiseur 'initWithSampleBuffer:'? – Eimantas

+0

là vous l'avez. je ne m'épuise pas il y a un problème là. aussi j'ajoute l'initialisation de la NSOperationQueue. –

+1

D'où vient le 'self'? Vous faites l'initialisation de votre objet dans le mauvais sens. Ajoutez 'self = [super init]' en tant que première ligne de votre initialiseur. Aussi à partir de regards, je vous suggère de lire le guide sur les files d'attente de programmation et d'exploitation multithread. – Eimantas

Répondre

5

Vous n'êtes pas appeler [super init] l'intérieur de votre constructeur?

En supposant que vous êtes sous-classe NSOperation (ou NSObject etc ...), vous devriez probablement!

+0

l'homme est-ce que je me sens stupide maintenant? : D merci @deanWombourne! –

Questions connexes