У меня возникли проблемы с эмуляцией архитектуры MVC при выполнении запроса JSON.Эмуляция архитектуры MVC с запросом JSON
Ниже я получаю данные асинхронно, создавая отдельный класс NSObject для обработки запроса.
Это сказало, что я в тупике относительно того, что я должен использовать в методе запросов ниже в TableViewController.
TableViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
//refactoring with MVC
self.aQueue = [[[NSOperationQueue alloc] init] autorelease];
self.storeLogos = [NSMutableDictionary dictionary];
[self queryStoreData];
}
-(void)queryStoreData
{
aStoreQuery = [StoreQuery queryForStores:self];
}
-(void)query:(StoreQuery *)query queryResult:(id)object
{
[self.aQueue addOperationWithBlock:^{
//JSONKit?
}
}
StoreQuery.m
@synthesize myConnection, myRequest, storeData;
+(StoreQuery*)queryForStores:(id<StoreQueryDelegate>)aDelegate
{
StoreQuery *storeQuery = [[[StoreQuery alloc] init] autorelease];
storeQuery.delegate = aDelegate;
storeQuery.myRequest = [NSURLRequest requestWithURL:@"URL"];
storeQuery.myConnection = [NSURLConnection connectionWithRequest:storeQuery.myRequest delegate:storeQuery];
storeQuery.storeData = [[NSMutableArray data] retain];
return storeQuery;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[self.storeData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.storeData appendData:data];
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(@"Connection Error: %@",[error localizedDescription]);
if (self.delegate) {
[self.delegate request:self didFailWithError:error];
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if (self.delegate) {
[_delegate request:self didFinishWithObject:self.storeData];
}
}
- (void)dealloc
{
[myRequest release];
[myConnection release];
[storeData release];
[super dealloc];
}
Кстати, пока я пытался представить реальные примеры того, как вы можете это сделать, ваш вопрос ссылается на использование «архитектуры MVC». Соединение между созданием сетевого запроса и правильной архитектурой модели-представления-контроллера является тонким. Но если вы действительно были обеспокоены надлежащей архитектурой MVC, вы, вероятно, не сделали бы массив результатов членом объекта контроллера, но на самом деле вы могли бы использовать некоторый объект модели. Но я предполагаю, что реальный вопрос заключается в том, как выполнять работу в сети и использовать результаты, а не архитектуру MVC. – Rob