Я понял, что приведение делегата к NSObject * решает проблему:
[self.delegate performSelector:@selector(overlayDismissed:) withObject:self afterDelay:0];
По какой-то странной причине автозаполнение даже не пришло -performSelector:withObject:afterDelay:
, поэтому мне пришлось набирать его вручную. Вместо этого он предложил только -performSelector:
и -performSelector:withObject:withObject:
Я предполагаю, что глупо использовать id в качестве типа для делегатов в Objective-C, и я никогда не знал, почему все, включая меня, делают это, а не просто определяют его как NSObject. Однако в моем протоколе даже сказано, что тот, кто соответствует этому протоколу, также должен соответствовать протоколу NSObject, выполняя это: OverlayDelegate <NSObject>
- и все же компилятор не получил его.
Так что на данный момент я удовлетворен тем, что он работает с гипсом, но похоже на то, что он ест старую рыбу.