103

iOS 7 でのみこのエラーが発生し、アプリケーションがクラッシュしました。iOS 6 では、エラーが発生することはありません。カメラを開くときにメモリ警告が 1 回だけ表示されます。

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

これが私がやっていることです。

imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setDelegate:self];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setAllowsEditing:YES];

[self presentModalViewController:imagePicker animated:YES];

を遅らせようとしましたがpresentModalViewController、まだ同じメッセージが表示されます。数秒後 (7-10)、アプリケーションがクラッシュしました。

このエラーは iOS 7 にのみ存在します。

誰か手がかりを持っていますか?

4

16 に答える 16

32

iOS7 の問題はトランジションに関係しています。以前のトランジションが完了せず、新しいトランジションを開始すると、iOS7 はビューを台無しにしますが、iOS6 はそれを正しく管理しているようです。

UIViewControllerビューがロードされ、タイムアウトが発生した後にのみ、 でカメラを初期化する必要があります。

- (void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear:animated];
    //show camera...
    if (!hasLoadedCamera)
        [self performSelector:@selector(showcamera) withObject:nil afterDelay:0.3];
}

ここに初期化コードがあります

- (void)showcamera {
    imagePicker = [[UIImagePickerController alloc] init];
    [imagePicker setDelegate:self];
    [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [imagePicker setAllowsEditing:YES];

    [self presentModalViewController:imagePicker animated:YES];
}
于 2013-10-14T10:04:10.190 に答える
11

ポップオーバー内にカメラ ビューを表示しようとしたときに問題が発生しました。iOS6ではこれは問題ありませんでしたが、iOS7ではメッセージが表示されました

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

同じように。

しかし、写真と動画の撮影で説明されているように、カメラ ビューの表示を全画面表示に変更した後、iOS 開発者ライブラリはすべて正常に動作し、メッセージは再び表示されなくなりました。ただし、アプリのモード (カメラ ビューまたはフォト ロールの表示) に応じて、メソッド- (void) imagePickerControllerDidCancel: (UIImagePickerController *) pickerが呼び出されるたびにポップオーバーまたはビュー コントローラーを閉じる必要があることを確認する必要がありました。

于 2013-10-23T17:53:31.313 に答える
6

プロパティを作成する

@property (nonatomic) UIImagePickerController *imagePickerController;

それで

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.modalPresentationStyle = UIModalPresentationCurrentContext;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing = YES;
self.imagePickerController = picker;
[self presentViewController:self.imagePickerController animated:YES completion:nil];

これで問題は解決するはずです

于 2013-12-12T01:41:41.053 に答える
3

私は同じ問題を抱えており、解決策を見つけました。アプリケーションの向きに関連するエラーだと思います。私のアプリケーションは横向きモードのみを使用しますが、UIImagePickerController は縦向きモードを使用します。main.m に try-catch ブロックを追加し、実際の例外を取得します。

Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES

この問題を解決する方法:

1) [ターゲット] -> [全般] または .plist ファイルでデバイスの向きを再確認します。サポートされているインターフェイスの向き: 横向き左、横向き右。

2) AppDelegate.m に追加します。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationMaskPortrait;
}

この手順の後、UIImagePickerController は正常に動作しますが、viewcontrollers を縦向きモードに回転できます。したがって、これを解決するには:

3) UINavigationController のカテゴリを作成します (supportedInterfaceOrientations は、iOS6 で UIViewController から UINavigationController に移動されました)。

@implementation UINavigationController (RotationIOS6)

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

@end

このソリューションは、iOS 6.0、6.1、7.0 で正しく動作します。お役に立てれば。

于 2013-09-25T09:21:49.160 に答える
3

Avirary SDKに付属のデモ アプリを変更しようとしたときに同じ問題が発生しました。デモ アプリでは、カメラ ロールから選択した写真しか編集できません。カメラからキャプチャして写真を編集するために、最初に次のコードを UIViewcontroller.m ファイルに追加しました。

#pragma mark - Take Picture from Camera
- (void)showCamera
{
//[self launchPhotoEditorWithImage:sampleImage highResolutionImage:nil];

    if ([self hasValidAPIKey]) {
        UIImagePickerController * imagePicker = [UIImagePickerController new];
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
        [imagePicker setDelegate:self];
        [imagePicker setAllowsEditing:YES]; //important, must have

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
            [self presentViewController:imagePicker animated:YES completion:nil];
        }else{
            [self presentViewControllerInPopover:imagePicker];
        }
    }
}

次に、アプリを実行すると、エラーが発生しました。

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

このエラーを解決するには、UIViewContooler.m ファイルの UIImagePicker デリゲートを次のように変更します。

#pragma mark - UIImagePicker Delegate

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSURL * assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];

    void(^completion)(void)  = ^(void){

        [[self assetLibrary] assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            if (asset){
                [self launchEditorWithAsset:asset];
            }
        } failureBlock:^(NSError *error) {
            [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Please enable access to your device's photos." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
        }];

        UIImage * editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
        if(editedImage){
            [self launchPhotoEditorWithImage:editedImage highResolutionImage:editedImage];
        }

    };

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self dismissViewControllerAnimated:YES completion:completion];
    }else{
        [self dismissPopoverWithCompletion:completion];
    }

}    

その後、エラーが消え、アプリが動作しました!

于 2014-02-03T04:49:02.660 に答える
1

これを試して、使用してください

[self performSelector:@selector(presentCameraView) withObject:nil afterDelay:1.0f];

と機能

-(void)presentCameraView{
    [self presentViewController:imagePicker animated:YES completion:nil];
}

交換する。[self presentModalViewController:imagePicker animated:YES]; そして原因のmakeimagePickerをグローバル変数として。

于 2013-09-26T06:30:27.083 に答える
1

これは、私のアプリymmvでそれを修正したものです

まず、iPhone - iPad アプリです。

appname-Info.plist で。サポートされているインターフェイスの向き (iPad) では、4 つの向きが示されました。

サポートされているインターフェイスの向きでは、3 つの向きが示されています。4 番目を追加してアプリを実行しましたが、デバッグ出力はありません。

お役に立てれば。

于 2013-10-15T05:15:54.480 に答える
0

iOS 8でも同じ問題がありましたが、アプリの設定->プライバシーでカメラアクセスが無効でした。有効にしただけで、機能していました。

于 2015-04-10T12:34:40.397 に答える
0

私は長い時間をかけて解決策を見つけようとしましたが、驚くべきことに最後にそれを見つけました。

選択した画像を取得して作業を再開するために行うことは次のとおりです:)

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
    UIImage* pickedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [composeImageView setImage:pickedImage];
[picker dismissViewControllerAnimated:YES completion:nil];
 }

はい、問題を解決するには、次のメッセージが表示されるように、ピッカーを通常どおり閉じるだけで済みます。画面の更新。」ピッカーの応答を停止しますが、ピッカーを閉じて、通常どおり画像を取得できます。

于 2015-05-06T09:56:19.133 に答える
0

私の場合、それはレイアウトの変更に関連していました.VCを提示するUIImagePickerViewControllerと、ステータスバーが非表示になっていますが、そうでUIImagePickerViewControllerはありません.

そのため、この回答UIImagePickerViewControllerに示されているように、ステータスバーを非表示にして解決しました。

于 2016-04-14T15:49:21.600 に答える