Всякий раз, когда вы ставите флажок, проверьте, проверены ли все его братья и сестры. Если это так, проверьте родителей. (И снова запустите проверку на этом уровне.)
Для этого ... ну, у вашего NSOutlineView есть источник данных, верно? Что-то, что говорит это, что отображать? Что ж, в методе, вызываемом флажком при его щелчке (независимо от того, что вы установили, чтобы он был), найдите родительский объект за строкой, по которой щелкнули, и затем обновите его статус. Если у вас нет прямой ссылки на флажок из модели, вы можете использовать -[NSOutlineView parentForItem:]
, чтобы найти его.
Надеюсь, это даст вам достаточно для начала. Если этого не произойдет, вам нужно задать более конкретный вопрос, подробно указав, с какими частями возникают проблемы.