2012-08-22 4 views
0

Я (сильно) подклассифицировал NSManagedObject для проекта. Он работал в оригинальном проекте без особых усилий.Почему методы подкласса NSManagedObject не распознаются?

Я скопировал эти файлы в новый проект, вручную добавив соответствующие классы CoreData в новую модель данных.

К сожалению, у меня возникли проблемы. По какой-то причине методы рассматриваемого подкласса игнорируются. Тот же самый код между двумя проектами, но я вдруг получаю непризнанную селекторную проблему.

NSFetchRequest *blockRequest=[[NSFetchRequest alloc] init]; 
NSEntityDescription *blockDesc=[NSEntityDescription entityForName:@"AdBlock" 
              inManagedObjectContext:context]; 
[blockRequest setEntity:blockDesc]; 

AdBlock *curBlock=[adBlocks objectAtIndex:blockIndex]; 

adBlocks=[context executeFetchRequest:blockRequest error:nil]; 

for (AdBlock *block in adBlocks) { 
    [block initAdBlock];//Crashes with unrecognized selector 
} 

Я проверил, и соответствующие файлы .m добавлены в фазу сборки компилятора. Код был буквально скопирован в папку & и идентичен между двумя проектами - исходные работы, адресат - нет.

Я заметил, что я явно не говорю контексту, что он должен возвращать тип подкласса, но это не было проблемой в старом проекте, так почему же это проблема в новой?

+1

Итак, вы добавили новые классы в модель данных, но изменили ли вы имя класса на свой собственный класс? – Rog

ответ

1

Когда что-то подобное происходит со мной, я стараюсь сделать две вещи. Первое, что я делаю, это убедиться, что я правильно #imported подкласс NSManagedObject (я забыл этот путь чаще, чем должен), но, как вы сказали, вы скопировали и вставили, я не думаю, что это ваша проблема. Во-вторых, я пытаюсь перестроить NSManagedObjects, перейдя в File> New> File, затем NSManagedObject Subclass, а затем выбрав NSManagedObjects, в котором я что-то изменил. Я бы рекомендовал восстановить их все в вашем случае. Посмотрите, работает ли это. Возможно, это не так, но это легко начать.

+0

* winces * Если я их перестрою, я потеряю всю логику! Ну хорошо, проще воссоздать это, чем кричать в приложении, чтобы начать «просто работать» – RonLugge

+0

После восстановления я бы порекомендовал вам протестировать его, прежде чем добавлять свою собственную логику. :) – esthepiking

+0

Приложение не будет работать без пользовательской логики - - и здесь я думал, что я умный, позволяя классу обрабатывать его собственные вещи и просто позволять внешнему миру узнать, что ему нужно знать. (Инкапсуляция ftw, правильно?) – RonLugge

1

Обязательно проверьте свою модель и убедитесь, что вы изменили имена классов в инспекторе. В противном случае они возвратятся как NSManagedObjects независимо от того, что. И используйте mogenerator, поэтому вам не нужно беспокоиться о восстановлении ваших классов.

1

Я знаю, что этот вопрос устарел, но, возможно, кто-то ищет это поможет.

Я использовал категории для добавления дополнительных функций в подклассы NSManagedObject. Это позволяет мне использовать команду XCode для генерации определения класса без уничтожения какой-либо пользовательской логики. Рон упоминает об этом в комментарии к выбранному ответу - просто подумал, что стоит обратить внимание на это, поскольку я считаю, что это довольно гладкое решение.

+0

Yup - это стало моим долгосрочным решением. Упаковщики не совсем поняли, поэтому я просто использовал категории. – RonLugge

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