Позвольте мне добавить, что подход, который вы изложили ...
NSString *lastDataSource = @"MyClass";
Class foo = [NSClassFromString(lastDataSource)];
... конечно, не сможет подавить ваши предупреждения во время компиляции, так как класс "foo" вычисляется только во время выполнения. Таким образом, хотя вы, как программист, можете ясно видеть из кода, что «foo» в конечном итоге станет классом «MyClass», это не ясно для компилятора, и поэтому, если «MyClass» имеет метод «myMethod:», вы будете по-прежнему получит предупреждение компилятора, если вы отправите это сообщение объекту, объявленному как "foo".
Полагаю, вы понимаете это, но лучше пояснить, почему такой подход не решит вашу проблему.