使用 UIImageWriteToSavedPhotosAlbum 保存图像时出现无法识别的选择器错误

Posted

技术标签:

【中文标题】使用 UIImageWriteToSavedPhotosAlbum 保存图像时出现无法识别的选择器错误【英文标题】:Unrecognized selector Error when saving an image using UIImageWriteToSavedPhotosAlbum 【发布时间】:2012-05-09 05:51:15 【问题描述】:

UILongPressGestureRecognizer 使用操作句柄LongPressOnPhotos 添加到我的 imageView 中。最相关的代码如下:

- (IBAction)handleLongPressOnPhotos:(UIImageView *)sender
self.imageWillBeSaved = sender;
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Save the photo" otherButtonTitles: @"Go to the Original photo", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view]; 
[actionSheet release];


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
switch (buttonIndex) 
    case 0:
        UIImageWriteToSavedPhotosAlbum(self.imageWillBeSaved.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil);

        break;

    default:
        break;




- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo

if (error != NULL)

    // handle error

else 

    // handle ok status


单击操作表上的“保存照片”按钮时,错误消息为:-[UILongPressGestureRecognizer image]: unrecognized selector sent to instance 0x21c2a0 代码有问题吗?提前致谢!

【问题讨论】:

你在哪里添加了UILongPressGestureRecognizer?也添加该代码。 请检查以下答案,问题已解决。 【参考方案1】:

只需替换前两行..

- (IBAction)handleLongPressOnPhotos:(UIImageView *)sender
self.imageWillBeSaved = sender;

与..

- (IBAction)handleLongPressOnPhotos:(UIGestureRecognizer *)sender
self.imageWillBeSaved = sender.view;

这应该可以工作......大卫很好地解释了为什么会发生这种情况。

【讨论】:

是的,它有效,但我遇到了另一个问题***.com/questions/10511047/…【参考方案2】:

您的发件人显然是 UILongPressGestureRecognizer。

手势识别器触发时触发的方法应如下所示

- (void)nameOfMethodHere:(UIGestureRecognizer *)gestureRecognizer;

参数是识别器,而不是图像视图。如果识别器仅附加到一个视图,您可以通过 view 属性获得它。否则,您可以获取长按的位置并点击测试以获取视图。

【讨论】:

我现在可以保存图片,但是为什么我点击“保存照片”按钮后操作表不会被关闭?如果我再次单击该按钮,操作表将被取消,并且照片会保存两次。 保存图像可能需要一秒钟。如果你等待,你会收到回调吗?也许您应该立即关闭 actionSheet(在 actionSheet:clickedButtonAtIndex: 中)并等待回调。如果有错误,那么你提出它,如果没有,用户会认为一切正常。 不是因为延迟。我在这里发布一个新问题***.com/questions/10511047/…,请检查【参考方案3】:

这是给UILongPressGestureRecognizer

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 1.0;
[YOURVIEW addGestureRecognizer:longPress];
[longPress release];    

这是UILongPressGestureRecognizer 的选择器,代码中的问题是,您将UIImageView 作为UILongPressGestureRecognizer 的选择器中的参数传递,只需用这个编辑它..

- (void)handleLongPress:(UILongPressGestureRecognizer*)sender 
 
    if (sender.state == UIGestureRecognizerStateBegan) 
    
         //YOUR CODE
    

【讨论】:

以上是关于使用 UIImageWriteToSavedPhotosAlbum 保存图像时出现无法识别的选择器错误的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)