업데이트 10/9/2016 : 다음과 같은 결함으로 인해 2011 년 9 월 22 일에 Apple과 레이더 # 28425770을 열었습니다. duplicate (레이더 # 28327056)이므로 iOS10에서 알려진 버그 인 것으로 보입니다.MusicSequenceFileLoad는 iOS10 (AudioToolbox/MusicPlayer)에서 -1을 반환합니다.
나는 iOS10 아이 패드 프로 (무선 랜에 음악 순서로 AudioToolbox/MusicPlayer의 API 방법 "MusicSequenceFileLoad()"(지정된 URL에서) MIDI 파일의 내용을로드를 호출 오류가 발생했습니다 모델)이 문제를 디버깅 할 때 커뮤니티의 도움을 크게 주시면 감사하겠습니다.
이 코드는 iOS7에, 8 일에 생산에 문제없이 작업하고 있으며, 9 2+ 년 동안도에서 문제없이 실행 :
연구/관측은 내가 지금까지 할 수있었습니다 iOS 10 시뮬레이터를 사용하지만 iOS 10.0.1 iPad Pro Wifi 모델에서만 오류를 반환합니다.
다른 장치에서 재생성 할 수 없었으며 일부 친구에게도 시도해달라고 요청했습니다. 문제없이 테스트 된 기기 : iPhone 6+, iPad Mini 4th Gen, iPad Pro Cellular.
이 MIDI 파일을 사용하는 VC가 처음 표시 될 때 모든 처리가 아무 문제없이 실행됩니다. 앱이 충돌하는 곳에서 VC가로드되는 것은 두 번째 (또는 때로는 세 번째)입니다. 문제는 100 % 일관되게 재현 될 수 있습니다.
OSStatus 결과 코드를 검사하여이 함수를 호출하면 단순히 -1 값이 반환되고 오류의 원인은 표시되지 않습니다.
Xcode에서 디버깅 할 때 오류 보고서가 없으면 예외 정보 또는 호출 스택을 사용할 수 있습니다.
메모리 관리 문제 (할당, 누수, 좀비)에 대한 프로파일 링에 크래시와 관련된 정보가 표시되지 않았습니다. 좀비 오브젝트 옵션을 켜면 좀비 오브젝트가 표시되지 않습니다.
응용 프로그램을 분석해도 메모리가 해제되지 않은 영역이 표시되지 않았습니다.
정적 인 개체를 변경해도 영향이 없으므로 메모리와 관련이없는 것처럼 보입니다.
누구든지이 문제를 디버깅 할 수있는 다른 방법에 대한 제안 사항이 있으면 크게 환영 할 것입니다. 원래 메모리 관리와 관련이있을 수 있다고 생각했지만, 메모리를 적절하게 처리하고 (응용 프로그램에 대해 ARC를 사용하고 필요에 따라 C-API 개체를 릴리스하는 것으로 나타났습니다) 프로파일 링을 통해 볼 수있는 문제는 밝혀지지 않았습니다.
코드 샘플 :
@property (readwrite, nonatomic) MusicPlayer midiMusicPlayer;
@property (readwrite, atomic) MusicSequence masterMidiMusicSequence;
- (void)initializeMusicPlayerAndMasterSequenceWithFile:(NSString *)midiFilename
{
CheckError(NewMusicPlayer(&_midiMusicPlayer), "NewMusicPlayer: _midiMusicPlayer");
CheckError(NewMusicSequence(&_masterMidiMusicSequence), "NewMusicSequence: _masterMidiMusicSequence");
NSString *midiFilePath = [NSBundle pathForResource:midiFilename
ofType:@"mid"
checkDocumentsDirectory:YES];
NSURL *midiFileURL = [NSURL fileURLWithPath:midiFilePath];
// Crash is encountered on the following line:
CheckError(MusicSequenceFileLoad(self.masterMidiMusicSequence, (__bridge CFURLRef)midiFileURL, 0, 0), "MusicSequenceFileLoad");
}
'Core Audio Mailing List'를 읽었지만이 'errno'가 무엇인지 이해할 수 없습니다. 그것을 어디에서 선언합니까? – pteofil
@pteofil 이미 존재하므로 Core Audio에서 사용하므로 선언 할 필요가 없습니다. 단순히 "errno"를 입력하면를 이미 가져 왔다고 가정하면 액세스 할 수 있습니다. 희망이 도움이됩니다. –
이 해결 방법은 여전히 iOS 11에서 사용할 수 있습니까? 나는 최신 베타 버전을 사용하고 있지만 EXCEPTION (-54) : "Open : Permission denied"가 표시됩니다. 'errno = 0; '을 설정해도 문제가 해결되지 않았습니다. – Nikolozi