Предупреждение делегата UIImagePickerController — несовместимый тип

Я пытаюсь связать свою библиотеку фотографий для отображения изображения в UIImageView, что позволит мне добавлять фильтры, но когда вы выбираете фотографию и нажимаете «Выбрать», приложение вылетает. Ниже приведен код, который я использую; - (IBAction)chooseImage:(id)sender {

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.delegate = self;

picker.allowsEditing = YES;

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

[self presentViewController:picker animated:YES completion:nil];

}

Ошибка в строке:

"picker.delegate = self;" 

и помечается как *"Назначение 'id' из несовместимого типа 'VSViewController const_strong'

Пожалуйста, если у кого-то есть предложение о том, как это исправить, или альтернативный код, который будет работать, это будет оценено.

Пожалуйста, старайтесь избегать слишком сложного языка, я новичок в программировании, и эта проблема уже давно меня расстраивает.


person user3739491    schedule 14.06.2014    source источник
comment
Вы включили делегата UIImagePickerController в свой .h?   -  person JMarsh    schedule 14.06.2014
comment
Я так не думаю, что это было за кодирование для этого?   -  person user3739491    schedule 14.06.2014
comment
Под VSAppDelegate.h или VSViewController.h? Я пробовал оба, но ни в одном из них не было @protocol.   -  person user3739491    schedule 14.06.2014
comment
@JMarsh, скорее всего, имел в виду @interface, а не @protocol.   -  person nklauza    schedule 14.06.2014


Ответы (2)


Ваш класс на самом деле должен соответствовать как UIImagePickerControllerDelegate, так и UINavigationControllerDelegate. Это делается в объявлении класса:

@interface VSViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
/* ... */
@end

Причина этого описана здесь: iPhone — наследование UIImagePickerControllerDelegate

person nklauza    schedule 14.06.2014
comment
Где будет вводиться в проекте? Делегаты или файлы .h или .m? Нужно ли что-то добавлять в основной файл? - person user3739491; 14.06.2014
comment
Является ли VSViewController классом, который вы написали? - person nklauza; 14.06.2014
comment
Вы имеете в виду, это тот, в котором я кодирую? - person user3739491; 14.06.2014
comment
Я предполагаю, что VSViewController — это класс, который вы создали и что у него есть соответствующий заголовочный файл и файл реализации, такие как VSViewController.h и VSViewController.m. Это правильно? - person nklauza; 14.06.2014
comment
Я также предположил из ошибки, которую вы нам дали, а также предоставленного вами фрагмента кода, что вы на самом деле кодируете в методах класса VSViewController. - person nklauza; 14.06.2014
comment
Да, я кодирую в файле VSViewcontroller.m - person user3739491; 14.06.2014
comment
Хорошо. Наиболее распространенное место для принятия протокола — это заголовочный файл. Итак, я предполагаю, что в VSViewController.h у вас есть строка, которая выглядит так: @interface VSViewController : UIViewController. Вам нужно изменить это, чтобы оно соответствовало фрагменту кода, который я предоставил выше. Подробнее о протоколах Objective-C можно прочитать здесь: developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ - person nklauza; 14.06.2014
comment
Большое спасибо! Я смог исправить эту конкретную проблему! Я очень ценю это. :) - person user3739491; 14.06.2014
comment
В информационных целях также можно указать, что класс соответствует протоколу в его файле реализации, что делает его соответствие закрытым. - person nklauza; 14.06.2014
comment
Пожалуйста! И похоже, что вы новичок в Stack Overflow, поэтому, надеюсь, вы не возражаете против дружеского напоминания отметить лучший ответ, который вы получили, как принятый. Дополнительную информацию см. здесь: stackoverflow.com/help/someone-answers - person nklauza; 14.06.2014

В вашем заголовочном файле вы должны соответствовать протоколу.

@interface YourViewController : UIViewController<UIImagePickerControllerDelegate>

а затем вам нужно реализовать селекторы протоколов.

Прочитайте это для справки: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIImagePickerControllerDelegate_Protocol/index.html

person David Xu    schedule 14.06.2014
comment
Чтобы быть уверенным, какой из них был заголовочным файлом? - person user3739491; 14.06.2014
comment
файл заголовка - это тот, который заканчивается на .h Кроме того, @David Xu, вам нужно обновить свой код. UIImagePickerControllerDelegate также требует соответствия протоколу UINavigationController. - person user2277872; 14.06.2014