I agree with Chuck and the commentators. Your method depends on too many other objects, but putting hasPickedName: on pickerViewController means pickerViewController pickerViewController does [picker.bvc.currentResolve.name isEqualToString:message] .
Instead, you can put hasPickedName: in bvc and paste bvc as a delegate (e.g. id<NamePickerDelegate> ) into your top-level object using Interface Builder. To be truly compatible with Demeter, make currentResolve grow a nameMatches: method that combines [currentResolve.name isEqualToString:message] .
You must carefully study the difficulty caused by the problem, the complexity styles that each solution will implement. If you think the source code is simpler and easier to maintain than alternatives, keep it.
source share