Прежде всего, MVC - это шаблон дизайна, а не набор правил. Это способ организации кода, чтобы представление (и как его представлять) полностью отделилось от модели/приложения.
Во-вторых, вы уверены, что импорт файла viewController в класс, который вызывает вызовы API (назовем его классом API), противоречит принципам MVC.
Но вы можете сделать обновление обзора в классе viewController! Вместо импорта класса ViewController в класс API вы можете сделать абсолютное обратное и использовать класс API из класса View Controller. Существует множество способов, с помощью которых классы могут взаимодействовать друг с другом в соответствии с шаблоном MVC. Посмотрите на этот article on the website objc.io, который говорит о том же.
Посмотрите на AFNetworking, чрезвычайно популярную сетевую библиотеку для приложений, написанных на Objective-C. Он отлично использует объективные блоки c, и то же самое рекомендуется для вашего использования.
Например, ваш класс для принятия вызова API может выглядеть следующим образом:
//APICall.h
@interface APICall : NSObject
-(void)makeAPICallWithHandler:(void(^)(NSError*, id data))handler;
@end
//APICall.m
#import "APICall.h"
@implementation APICall
-(void)makeAPICallWithHandler:(void(^)(NSError*, id data))handler
{
NSError *err;
id data;
//Make your API call and then pass the result in the handler
if (err)
{
handler(err, nil);
return;
}
handler(nil, data);
}
@end
Описанный выше метод может быть реализован с помощью контроллера представления следующим образом:
//ViewController.m
#import "ViewController.h"
#import "APIClass.h"
@implementation ViewController
{
APIClass *api;
id displayData;
__weak IBOutlet UITableView *tableView;
}
-(void)viewDidLoad
{
[super viewDidLoad];
api = [APICall new];
[api makeAPICallWithHandler:^(NSError* error, id data) {
if (error)
{
//Show alert or something
return;
}
displayData = data;
[tableView reloadData];
}];
}
@end
Дело в том, что используя блоки, вы можете сделать данные из вызова API доступными для viewController, который затем может обновить tableView и поддерживать его источник данных. Это соответствует MVC, поскольку вы полностью отделите обновление вида от фактического вызова API.
Вы можете показать через код, что вам делать? –