Я пытаюсь изучить хорошую практику MVC для своих проектов iOS, изменив учебник Apple (BirdSighting), который я успешно завершил, в свое приложение. Они построили классы NSObject для модели и контроллера. Их первый ViewController - это TableVC. В appDelegate.m они изменили сделалиFinishLaunchingWithOptions, подключив firstViewController к dataController. В моем приложении я не хочу, чтобы мой первый ViewController был таблицей, а просто базовым VC. Я получаю предупреждение: Несовместимые типы указателей. Вот этот код:Предоставление доступа ViewController к классам данных и контроллеров
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
// enterView is initial UIViewController
enterView *firstViewController = (enterView *)[[navigationController viewControllers] objectAtIndex:0];
// dBcontrols is a NSObject class
dBcontrols *aDataController = [[dBcontrols alloc] init];
firstViewController.dataController = aDataController; // <-- ERROR Here.
return YES;
}
Мой первый ViewController, enterView, имеет это в заголовке:
@class contacts;
@class dBcontrols;
@interface enterView: UIViewController
@property (strong, nonatomic) enterView *dataController;
Мой класс модели, контакты, и мой контроллер, dBcontrols, практически такие же, как и в учебник Apple. Но ViewController не имеет доступа к контроллеру. В enterView.m эти строки:
#import "enterView.h"
#import "contacts.h"
#import "dBcontrols.h"
@interface enterView()
@end
@synthesize dataController = _dataController;
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSInteger cntC = [self.dataController countContacts]; <-- ERROR here
NSLog(@"number of contacts = %d", cntC);
}
Там есть ошибка, которая говорит: Нет видимого интерфейс не объявляет селектор 'countContacts', который является методом контроллера находится в dBcontrols. м так:
- (NSUInteger)countContacts {
return [self.masterContactList count];
}
Вот что в заголовке, dBcontrols.h:
@class contacts;
@interface dBcontrols: NSObject
- (NSUInteger)countContacts;
. . .
@end
вызвала мою проблему при переходе от TableVC к основным КАМ как первый КИ? Я думаю, что это единственное релевантное изменение из учебника. Как я могу это исправить? Надеюсь, я предоставил достаточно информации. Большое спасибо! Рик
Отлично! Вот и все. Спасибо за помощь и совет. –