¿Las conexiones NSURLC pertenecen a mi model o controller?

Diga que estoy usando una API JSON o XML para get datos sobre mis proyectos desde una URL utilizando una NSURLConnection asíncrona, parsing eso en un NSMutableArray y luego llenando una NSTableView .

Tengo un model: Project Tengo un controller: TableViewController (que actúa como fuente de datos de tabla y delega)

¿Dónde debo colocar el código que inicia la request y analiza el resultado en un NSMutableArray .

¿Debo tener:

1:

Un método dentro del Proyecto llamado -(NSMutableArray* ) getAllProjects y llamar a esto desde mi Controlador.

O 2:

Debería enumerar un object NSMutableArray de Project * , llamado por ejemplo ProjectsArray * dentro de mi Controller; cada vez que llama [[Project alloc] init] ?

La opción 1 tiene mucho más sentido para mí porque podría querer get todos los proyectos de múltiples controlleres y esto ahorraría el código repetitivo, solo necesito llamar a un método público dentro de mi model de proyecto. En este caso, ¿estaría haciendo muchas declaraciones [[self alloc] init] ? ¿Esta bien? También mi model tendría que ser un delegado de NSURLConnection . ¿Es esto correcto?

Sin duda debe estar en tu Modelo.

Motivo:

Debido a que necesitará actualizarlo muchas veces desde diferentes controlleres, puede usar KVO para eso en el futuro.

Desde mi experiencia, creo que lo bueno es tener las rutinas de análisis en el model (ProjectsArray) y cosas de connection en otra class, lo que inicia la connection y devuelve NSData en bruto (a través de un delegado, por ejemplo), que pasas al model para analizarlo De esta forma, su model o viewController no tendrá múltiples funciones.

En cuanto a llamar a [[Project alloc] init] cada vez que necesita los datos, puede usar reference estática en la class de model y luego getla por algo similar - (ProjectsArray *)instance

 /* * UITableViewController has the word "controller" in it but that * does not make it a controller... it's a view. Pure and simple. * * /This/ is a controller... */ @implementation MyController @synthesize data; // assume readonly @property in interface -(void)fetchData { NSURLConnection *connection; // Set up URL connection, etc. Speaking very loosely, and // lossing over some important threading details... NSURLResponse *response = GetResponse(); NSError *__autoreleasing error; @autoreleasepool { // build objects. premature optimization is the root of all evil, // but if you're really worried about too much allocation, you // can resist duplication with custom logic in parse(). self.data = parse([response data], &error); } if (data == nil) { // Error notification } else { // Success notification NSNotification *didFetch = [NSNotification notificationWithName:@"didFetch" object:self.data userInfo:nil]; [[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:didFetch waitUntilDone:NO]; } } @end @interface MyTableViewController () @property (unsafe_unretained) MyController *controller; @property (strong, nonatomic) NSArray *dataView; @end @implementation MyTableViewController @synthesize controller = _controller; @synthesize dataView = _dataView; -(void)viewDidLoad { _controller = [MyController controller]; // singleton [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData:) name:@"didFetch" object:nil]; } -(IBAction)buttonPress { [_controller fetchData]; // again, I'm glossing over threading details... } -(void)updateData { // Controller owns the data, we just get a view of it here. self.dataView = [[_controller data] arrayOfSomeSort]; [self.view reloadData]; } @end