ObjectiveCを使用してReplayKitのRPPreviewViewControllerへの参照を保持することに問題があり、何が間違っているのだろうかと思っています。ReplayKit - ObjectiveCの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ではありませんが、参照しようとするとクラッシュします)。
リファレンスを渡した後、[self previewRecording]をstopRecordingWithHandlerブロック内で実行しようとすると、すべて正常に動作します。
ハンドブックのpreviewViewControllerは、アプリがブロックを離れるとすぐに解放されるようです。
ほとんどの例はSwiftで書かれていますが、残念ながら私はObjectiveCに非難されます。 Swiftの例では、previeViewControllerへの参照は変数に渡されますが、ObjectiveCでは機能していないようです。
ここに間違いがありますか?
答えのおかげで、魅力的でした!原子と無合成はトリックでした。また、iOS9では、常にメインスレッドでプレビューを実行する必要があることを発見しました。 – zompi