3

次の場所に問題があります。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {}

ユーザーの写真を閲覧して画像を選択しようとしているときではなく、カメラでのみ呼び出されます。

UIImagePicker デリゲートの初期化コードは次のとおりです。

-(void)viewDidLoad{

    [self initImagePicker];

}


-(void)initImagePicker{
    DLog(@"");

    self.imagePickerController.delegate = self;

}



- (void)setupImagePicker:(UIImagePickerControllerSourceType)sourceType
{
    self.imagePickerController.sourceType = sourceType;

    if (sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        // user wants to use the camera interface
        //
        self.imagePickerController.showsCameraControls = NO;

        if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0)
        {
            // setup our custom overlay view for the camera
            //
            // ensure that our custom view's frame fits within the parent frame
            CGRect overlayViewFrame = self.imagePickerController.cameraOverlayView.frame;

            CGRect newFrame = CGRectMake(0.0,CGRectGetHeight(overlayViewFrame)-15.0,CGRectGetWidth(overlayViewFrame),15.0);

            self.view.frame = newFrame;
            [self.imagePickerController.cameraOverlayView addSubview:self.view];
            [self.view bringSubviewToFront:self.view];
        }
    }
}

次に、私のルート クラスで、UIImagePicker へのデリゲートであるクラス UIImagePicker へのデリゲートです。

#pragma mark -
#pragma mark Toolbar Actions

- (void)showImagePicker:(UIImagePickerControllerSourceType)sourceType
{




    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        // camera is not on this device, don't show the camera button
        NSMutableArray *toolbarItems = [NSMutableArray arrayWithCapacity:self.myToolbar.items.count];
        [toolbarItems addObjectsFromArray:self.myToolbar.items];
        [toolbarItems removeObjectAtIndex:2];
        [self.myToolbar setItems:toolbarItems animated:NO];
    }

    if ([UIImagePickerController isSourceTypeAvailable:sourceType])
    {


        self.overlayViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"OverlayViewController"];
        self.overlayViewController.delegate = self;

        self.overlayViewController.imagePickerController = [[UIImagePickerController alloc] init];
        [self.overlayViewController setupImagePicker:sourceType];
        [self presentModalViewController:self.overlayViewController.imagePickerController animated:YES];
    }
}

私はこれがSOの質問のための多くのコードであることを知っていますが、このクラスを実装した経験のある人々にとって、私は何が間違っているのでしょうか?

私にとって、この行は奇妙です:

 self.overlayViewController.imagePickerController = [[UIImagePickerController alloc] init];

以前に所有者の外部でプロパティを割り当てて初期化したことはありません。それが問題ですか?

4

3 に答える 3

6

デリゲートの設定が早すぎると思います ( initImagePickerin viewDidLoad)。self.imagePickerControllerゼロかもしれません。を作成した後でデリゲートを設定する必要がありますUIImagePickerController

于 2013-02-17T12:04:29.603 に答える
1

.hファイルのUIImagePickerDelegateとUINavigationControllerDelegateを@interfaceでに設定します。

など

@interface class : UIView <UIImagePickerDelegate , UINavigationControllerDelegate>

UIImagePickerControllerオブジェクトを使用して、自己委任も設定します。

imgPickerController.delegate = self;

それがあなたにも役立つことを願っています。

于 2013-02-17T17:44:06.747 に答える
1

修正が見つかりました:

追加する必要があります:

self.overlayViewController.imagePickerController.delegate = self.overlayViewController;

後:

self.overlayViewController.imagePickerController = [[UIImagePickerController alloc] init];
于 2013-02-17T12:04:36.033 に答える