Проблема в том, что NSArray не определяет тип, как массивы других языков. Поэтому, когда вы используете objectAtIndex:, он возвращается к универсальному типу 'id'.
Если вы хотите, чтобы предупреждение исчезло, сделайте что-то вроде:
YourViewController * controller = [arr objectAtIndex: 1];
[controller setRosterForBoat: tempRowers];
И убедитесь, что вы определили setRosterForBoat: в файле .h вашего контроллера представления.
Редактировать: И чтобы ответить на ваш другой вопрос: это работает, потому что Objective-C использует передачу сообщений для связи между экземплярами. Во время компиляции XCode не может найти взаимосвязь Class-> Method между 'id' и setRosterForBoat :, но во время выполнения, потому что этот метод существует для вашего контроллера представления, все работает плавно.