2012-06-24 2 views
0

У меня возникли проблемы с установкой делегата объекта Core Data на определенный контроллер представления, который у меня есть. Я получаю и ошибка, которая приводит меня к мысли, что это не синтезирования методов доступа:Настройка делегата для объекта NSManaged

2012-06-23 18:21:20.566 App[34164:12803] -[NSManagedObject setSyncDelegate:]: unrecognized selector sent to instance 0x907cf30 
2012-06-23 18:21:20.567 App[34164:12803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject setSyncDelegate:]: unrecognized selector sent to instance 0x907cf30' 

NSManagedObject, SavedPhoto, имеет следующий .h:

@interface SavedPhoto : NSManagedObject 

@property (nonatomic, strong) NSString *fileName; 
@property (nonatomic, strong) id<SyncPhotoDelegate> syncDelegate; 

@end 

и .m:

@implementation SavedPhoto 

@dynamic fileName; 
@synthesize syncDelegate = _syncDelegate; 

@end 

И я пытаюсь установить делегат в контроллере представления следующим образом:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
SavedPhoto *savedPhoto = (SavedPhoto *)[NSEntityDescription insertNewObjectForEntityForName:@"SavedPhoto" inManagedObjectContext:context]; 
[savedPhoto setSyncDelegate:self]; 

Где «self» - это контроллер вида, который реализует протокол SyncPhotoDelegate. Возможно ли иметь синтезированное свойство в NSManagedObject?

ответ

3

Похоже, что экземпляр на самом деле не один из ваших классов. Я бы посмотрел ваш файл модели, чтобы убедиться, что он настроен правильно. Обратите внимание, что на вашем консольном выводе указано, что он говорит [NSManagedObject setSyncDelegate:] и не[SavedPhoto setSyncDelegate:]

+0

Это интересное наблюдение. У меня есть явный бросок SavedPhoto до 'SavedPhoto * savedPhoto = (SavedPhoto *) [NSEntityDescription insertNewObjectForEntityForName: @ "SavedPhoto" inManagedObjectContext: контекст],' Кроме того, я проверил '[savedPhoto setFileName: @ "обув" ] ', и это, казалось, сработало, поэтому он правильно установил некоторые методы доступа. – Christian

+0

Спасибо, проблема заключалась в том, что «syncDelegate» фактически является переходным атрибутом. Таким образом, мне нужно было включить его не только в файл класса SavedPhoto, но и в модель данных (.xcdatamodeld), добавив атрибут «syncDelegate» с неопределенным переходным атрибутом. – Christian

+1

Является ли экземпляр сейчас одним из ваших классов? Я имею в виду, вы можете заставить все работать над тем, что среда выполнения может преобразовать в кодирование с ключом, но это может стоить отслеживать. Кастинга недостаточно во время выполнения, чтобы получить подходящий экземпляр вашего класса; он просто позволяет компилировать код, который говорит об интерфейсе этого класса, если это имеет смысл. Вы можете настроить, какой класс возвращает объект, как в редакторе модели Xcode в правой панели. –

Смежные вопросы