The base custom control had a boolean value 'firstResponder' which I was using to keep track of which of the custom controls on a screen should start editing first.
In the initialisation code was the following:
if([firstResponderAttribute isEqualToString:@"YES"]) firstResponder=YES;
else firstResponder=NO;
When the firstResponderAttribute was YES the control threw the error, when it was NO the control was fine. Evidently when setting 'firstResponder' to NO (==0x0) the responder chain was seeing the value as nil, but when it was set to YES (==0x1 from the error message) the responder chain was trying to access an object at address 0x1 and failing.
Solution? Don't use firstResponder as value in any UIView subclass!
On a side note this problem wasn't picked up by Analyse and I haven't found any reference to the value in Apple docs (although I haven't looked very hard...)