Objetivo C - Array é legível em uma função (void), mas não uma (ibaction)
-
26-09-2019 - |
Pergunta
Ei, todos, eu tenho uma matriz que contém todos os caminhos de arquivo .aif no meu aplicativo, que encontrei usando o MainBundle e os recursos.
Essa matriz precisa ser transmitida através de 2 controladores de exibição para alcançar onde é realmente usado. O problema é que trava ou registra algo totalmente errado. Quando depuro, recebo uma nota exc_bad_access no acidente, mas não quando o executo normalmente onde ela trava.
Aqui está o lugar onde funciona;
- (void)buildDrumTrigger {
defaultSounds = [[NSArray alloc] initWithObjects: @"kick_3", @"aif", @"snare_1", @"aif", @"HiHat_1", @"aif", @"ride_1", @"aif", @"crash_1", @"aif", @"crash_2", @"aif", @"crash_3", @"aif", @"wave_1", @"aif", nil];
self.DrumObject = [[DrumTrigger alloc] initWithSounds:defaultSounds:5:volumeBox];
[defaultSounds release];
NSLog(@"Possible Sounds: %@", DrumObject.possDrumSounds);
}
Isso retorna uma longa lista de caminhos que terminam no nome do arquivo.aif. Você entendeu a ideia.
No entanto...
// Change the current view to the options window.
- (IBAction)goToOptionsView {
NSLog(@"Loading options menu");
NSLog(@"DrumObject.drumSounds: %@", DrumObject.drumSounds);
NSLog(@"DrumObject.possDrumSounds: %@", DrumObject.possDrumSounds);
optionsViewController.soundBox2 = DrumObject.drumSounds;
optionsViewController.possDrumSounds = DrumObject.possDrumSounds;
[self presentModalViewController:optionsViewController animated:YES];
}
Esse trecho causa um acidente. Se eu comentar as peças em que lida com os supostos, funciona bem. Caso contrário, trava ou de alguma forma altera a matriz para conter objetos aleatórios como o UIViewControllers, dos quais não tenho idéia de onde eles vieram.
Todas as ajuda apreciadas, obrigado!
Solução
Você provavelmente está mantendo a matriz dentro do DrumObject sem mantê -lo, então acaba sendo sobrescrito de lixo.
Outras dicas
Você está lançando defaultSounds
dentro buildDrumTrigger
, então, quando outros métodos tentam acessá -lo, ele aponta para dados que foram desalocados.
EXC_BAD_ACCESS Indica que você está tentando acessar a memória que não pode acessar, normalmente porque você já o lançou.