This protocol doesn't make much sense to me. The data source should be the provider of the data, so I would assume it knows the data it is providing. Thus, I would not expect it to have a delegate to call when retrieving data. I mean, off course it makes sense for the datasource object to use other objects to access and retrieve the data from the database or from the web, but I would expect the datasource to know which objects to call and where to find the data. They should be the holders of this knowledge. 

If the data source is just delegating the data gathering task and its only task is to restructure the data to pass it up, it looks more like an adapter for me.