Самая распространенная ошибка, которую я видел, когда метод делегата не вызывается, это свойство делегата nil. Другими словами, забыли указать, кто является делегатом?
Что касается советов по отладке, каждый раз, когда я вижу проблему, когда делегат не вызывается, это установить точки останова во всем коде и пройти по коду. Тогда вы сможете увидеть, куда идут дела и что называется или нет.
Кроме того, вы часто упоминаете исключения. Цель C предпочитает не использовать исключения, поскольку они являются относительно дорогим вызовом в языке (в отличие от, скажем, Java). Objective C может и использует исключения, но они редки. Возможно, вы захотите подкрепить свое понимание обработки ошибок в цели c.