ReplayKit에서 ObjectiveC로 RPPreviewViewController에 대한 참조를 유지하는 데 문제가 있으며 무엇이 잘못되었는지 궁금합니다.ReplayKit - ObjectiveC의 RPPreviewViewController에 대한 참조 유지
.H 파일 :
@interface ReplayKitHelper : NSObject <RPPreviewViewControllerDelegate, RPScreenRecorderDelegate>
-(void)startRecording;
-(void)stopRecording;
-(void)previewRecording;
@property(strong) RPPreviewViewController* previewViewControllerRef;
@end
.mm 파일 : 나는 순서대로 방법 startRecording, stopRecording 및 previewRecording를 시작 런타임 동안
@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
. previewRecording 때까지는 previewViewControllerRef가 더 이상 유효하지 않습니다 (아무 것도 아니지만 참조하려고 할 때 충돌합니다).
stopRecordingWithHandler 블록 내에서 [self previewRecording]을 실행하려고하면 참조를 전달한 후 모든 것이 정상적으로 작동합니다.
핸들러의 previewViewController가 앱이 블록을 떠난 직후에 출시 된 것처럼 보입니다.
예제는 대부분 Swift로 작성되었으며 유감스럽게도 ObjectiveC에 대한 비난을 받았습니다. Swift 예제에서 previeViewController에 대한 참조는 변수로 전달되지만 ObjectiveC에서는 작동하지 않는 것처럼 보입니다.
여기에 무슨 문제가 있습니까?
답변을 주셔서 감사합니다. 원자와 합성이없는 트릭. 또한 iOS9에서는 항상 기본 스레드에서 미리보기를 실행해야한다는 것을 알았습니다. – zompi