Ошибка нераспознанного селектора при сохранении изображения с помощью UIImageWriteToSavedPhotosAlbum

UILongPressGestureRecognizer добавляется в мой imageView с дескриптором действияLongPressOnPhotos. Наиболее связанные коды следующие:

- (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]: нераспознанный селектор отправлен экземпляру 0x21c2a0. Есть проблемы в коде? Заранее спасибо!


person lu yuan    schedule 09.05.2012    source источник
comment
где вы добавили UILongPressGestureRecognizer? Добавьте и этот код.   -  person rishi    schedule 09.05.2012
comment
Пожалуйста, проверьте следующие ответы, проблема решена.   -  person lu yuan    schedule 09.05.2012


Ответы (3)


Ваш отправитель, очевидно, является UILongPressGestureRecognizer.

Методы, которые срабатывают при срабатывании распознавателя жестов, должны выглядеть следующим образом.

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

Аргументом является распознаватель, а не представление изображения. Если распознаватель привязан только к одному представлению, вы получаете его через свойство view. В противном случае вы можете получить местоположение долгого нажатия и нажатия, чтобы получить представление.

person David Rönnqvist    schedule 09.05.2012
comment
Теперь я могу сохранить изображение, но почему лист действий не будет закрыт после того, как я нажму кнопку «Сохранить фотографию»? Если я нажму кнопку еще раз, лист действий закроется, а фотография сохранится дважды. - person lu yuan; 09.05.2012
comment
Сохранение изображения может занять секунду. Вы получаете обратный звонок, если вы ждете? Возможно, вам следует сразу закрыть actionSheet (в actionSheet:clickedButtonAtIndex:) и дождаться обратного вызова. ЕСЛИ есть ошибка, вы указываете ее, если нет, пользователь будет считать, что все прошло нормально. - person David Rönnqvist; 09.05.2012
comment
Это не из-за задержки. Я публикую новый вопрос здесь .com/questions/10511047/, пожалуйста, проверьте - person lu yuan; 09.05.2012

Просто замените две верхние строки..

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

с..

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

и это должно сработать... причина, по которой это происходит, очень хорошо объяснена Дэвидом.

person Ankit Srivastava    schedule 09.05.2012
comment
Да, это работает, но я столкнулся с другой проблемой: stackoverflow.com/questions/10511047/ - person lu yuan; 09.05.2012

Это для 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
    }
}
person Mehul Mistri    schedule 09.05.2012