Can you give some specific examples? (declaration, use, and the exact error message)
In general, the reverse change seems to be happening: delegate properties that were just id have become id<SomeProtocol>. AFAIK the ability to send an arbitrary message to a genuine id variable hasn't changed.
This may be part of my on-going saga with XCode 8.2.1 with my multi-target iOS project -- claimed missing files, etc. However, I am getting warnings on both lines for things like:
[self.delegate performSelector:@selector(handleColorButton:) withObject:button];
saying: "Undeclared selector 'handleColorButton:"' The delegate does implement that method.
In the absence of more context (about what was included) then I would guess that the problem is nothing to do with the delegate as such, but rather that the compiler simply has never seen any definition of "handleColorButton:" — or, if you're Quinn, "varnishWaffles".
This could indeed be a consequence of header files not being included. Or it could be a consequence of one of the build settings for complaining about undeclared selectors having been turned on when your project got updated for Xcode 8.2.1, when it was previously off or didn't exist yet.
Now, it seems that warning messages appear for delegates which are not defined by a protocol.
I’m going to second QuinceyMorris’s request for some examples here. However, there is one specific issue you have to watch out for here, namely ARC. Assuming a delegate like this:
@property (nonatomic, weak, readwrite) id delegate;
then the following code will fail because the compiler in ARC mode needs to know the type signature of the method, and it’s never seen that method before.
The best fix for this is to make the delegate confirm to a protocol and add the method there. But you can avoid the problem by declaring the method anyway that the compiler can see it.
Share and Enjoy
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"