我在使用 ObjectiveC 在 ReplayKit 中保留对 RPPreviewViewController 的引用时遇到问题,我想知道我做错了什么。
.h 文件:
@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。一切都很好,直到 previewRecording,它看起来 previewViewControllerRef 不再有效(它不是 nil,但是当我试图引用它时它会崩溃)。
当我尝试在 stopRecordingWithHandler 块内运行 [self previewRecording] 时,在我通过引用后 - 一切正常。
看起来处理程序中的 previewViewController 在应用程序离开块后立即释放。
大多数示例都是用 Swift 编写的,不幸的是,我注定要使用 ObjectiveC。在 Swift 示例中,对 previeViewController 的引用只是传递给变量,但在 ObjectiveC 中它似乎不起作用。
你有什么想法吗?