У меня проблема с сохранением ссылки на RPPreviewViewController в ReplayKit с ObjectiveC, и мне интересно, что я делаю неправильно.ReplayKit - ссылка на RPPreviewViewController в ObjectiveC
заголовочный файл:
@interface ReplayKitHelper : NSObject <RPPreviewViewControllerDelegate, RPScreenRecorderDelegate>
-(void)startRecording;
-(void)stopRecording;
-(void)previewRecording;
@property(strong) RPPreviewViewController* previewViewControllerRef;
@end
.mm файл:
@implementation ReplayKitHelper
@synthesize previewViewControllerRef;
-(void)startRecording
{
RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder;
recorder.delegate = self;
[recorder startRecordingWithMicrophoneEnabled : true handler :^(NSError *error)
{
}];
}
-(void)stopRecording
{
RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder;
[recorder stopRecordingWithHandler :^(RPPreviewViewController * previewViewController, NSError * error)
{
if (error == nil)
{
if (previewViewController != nil)
{
previewViewControllerRef = previewViewController;
}
}
}];
}
-(void)previewRecording
{
if (previewViewControllerRef != nil)
{
previewViewControllerRef.modalPresentationStyle = UIModalPresentationFullScreen;
previewViewControllerRef.previewControllerDelegate = self;
[[IOSAppDelegate GetDelegate].IOSController presentViewController : previewViewControllerRef animated : YES completion : nil];
// IOSController is my main UIViewController
}
}
@end
Во время выполнения я запускаю методы startRecording, stopRecording и previewRecording, в таком порядке. Все будет хорошо, пока не будет анонсирована запись, где будет выглядеть previewViewControllerRef (это не ноль, но он падает, когда я пытаюсь обратиться к нему).
Когда я пытаюсь запустить [self previewRecording] внутри блока stopRecordingWithHandler, после передачи ссылки - все работает нормально.
Похоже, что previewViewController от обработчика освобождается сразу после того, как приложение покидает блок.
Большинство примеров написано в Swift, к сожалению, я обречен на ObjectiveC. В примерах Swift ссылка на previeViewController просто передается переменной, но в ObjectiveC она, похоже, не работает.
У вас есть идеи, что здесь не так?
Спасибо за ответ, он работал как шарм! Атомный и никакой синтез не сделал трюк. Кроме того, я обнаружил, что на iOS9 вы должны всегда запускать предварительный просмотр в основном потоке. – zompi