My IOS base SDK - 8.1. dispatch_get_main_queue
отлично работает, когда я работаю на 8.1 симуляторе. Однако, когда я запускаю его на 7.1-симуляторе, он не вызывается. Я заметил, что dispatch_get_main_queue
был переоценен в iOS 8.0 и более поздних версиях.dispatch_get_main_queue не работает
Как я могу решить эту проблему? изменить базу SDK или что?
мой код
AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];
// audio track
AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
//
NSError *error;
AVAsset *videoAsset = [AVAsset assetWithURL:videoURL];
[audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] firstObject]
atTime:kCMTimeZero
error:&error];
if (error) {
NSLog(@"extract audio error!");
return;
}
error = nil;
// audio path
NSString *path = [NSString stringWithFormat:@"%@newAudio.m4a", NSTemporaryDirectory()];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
if (![[NSFileManager defaultManager] removeItemAtPath:path error:&error]) {
NSLog(@"audio cannot be saved!");
}
}
// exporter
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
presetName:AVAssetExportPresetAppleM4A];
exporter.outputURL = [NSURL fileURLWithPath:path];
exporter.outputFileType = AVFileTypeAppleM4A;
exporter.shouldOptimizeForNetworkUse = YES;
[exporter exportAsynchronouslyWithCompletionHandler:^{
//NSLog(@"export status: %ld", exporter.status);
dispatch_async(dispatch_get_main_queue(), ^{
[self exportDidFinish:exporter];
});
}];
}
У вас есть образец кода, чтобы показать нам, что вы делаете? Я использовал 'dispatch_get_main_queue' в iOS 8 так же, как и с iOS 7, и до сих пор не испытывал никаких проблем. –
@Kai [экспорт экспортераAsynchronouslyWithCompletionHandler:^{ dispatch_async (dispatch_get_main_queue(),^{ [self exportDidFinish: exportorter]; }); }]; – CancerKnight
Вы уже установили точку останова на '[self exportDidFinish: exportorter];', чтобы подтвердить, что вы никогда не выполняете эту строку в симуляторе iOS 7.1? Вам нужно разбить свой пример на отдельные строки, чтобы проверить. Если это не принесло ничего полезного, я бы рекомендовал добавить некоторый код KVO (как предложено в документации для ['exportAsynchronouslyWithCompletionHandler:'] (http://goo.gl/hxbmMI)) для 'status' и' error 'чтобы увидеть, если экспорт по какой-то причине не завершен. –