Некоторые проблемы с вашим сеттером: (1) не вызывайте геттер (self.currentEvent) при освобождении ивара, (2) всегда сохраняйте новый obj до освобождения старого obj, в случае это тот же объект, то есть:
-(void)setCurrentEvent:(id)e {
[e retain];
[currentEvent release];
currentEvent = e;
}
Кроме того, я не понимаю, что вы пытаетесь делать с динамической типизацией.
Эта строка вызовет предупреждение компилятора, потому что вы сказали, что currentEvent - это id, у которого нет члена комментариев, поэтому он справедливо жалуется:
return [currentEvent.comments count];
Если каким-то образом вы знаете, что id currentEvent на самом деле является объектом определенного класса, у которого есть комментарии, вы можете преобразовать id в другой тип, чтобы избежать предупреждения:
return [(CommentEvent*)currentEvent.comments count];
Но прежде чем ты это сделаешь, откуда ты знаешь? Вы можете проверить, является ли это правильный класс:
if ([currentEvent isKindOfClass:[CommentEvent class]]) {
...