Я читал множество книг по разработке для iPhone и делал примеры, но я заметил, что идея MVC действительно не преподается правильно (хотя авторы действительно говорят, что Xcode «поддается» способу кодирования MVC).
Быстрый пример. Я хочу сделать простое приложение калькулятора (как многие, кто только начинает).
У меня есть рабочая версия со всем моим кодом внутри файла xxxxxViewController.m. Акции и розетки все работают хорошо. Проблема с этим подходом состоит в том, что если я хочу иметь несколько представлений (обычный калькулятор и научный калькулятор), я бы скопировал и вставил свой код, поэтому у меня теперь есть две версии. Я явно пытаюсь избежать этого.
Итак, я создал свой собственный класс (на основе NSObject) в качестве моего CalculatorEngine.
Проблема в том, что при попытке выделить и инициализировать мой CalculatorEngine я получаю ошибки, такие как «Переопределение CalculatorEngine с другим типом» и «Отсутствует спецификатор типа, по умолчанию используется int».
Полагаю, мне не хватает чего-то очевидного.
Можете ли вы указать мне направление выборки любого вида, где отдельный класс используется в качестве «движка», а не кода внутри xxxxViewController?
На этом этапе приведенный ниже код фактически ничего не делает. Я просто пытаюсь получить объект CalculatorEngine для использования в CalculatorViewController.m. Здесь я получаю сообщение об ошибке.
// CalculatorAppDelegate.h
// Calculator
#import <UIKit/UIKit.h>
@class CalculatorViewController, CalculatorEngine;
@interface CalculatorAppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet CalculatorViewController *viewController;
@end
// CalculatorAppDelegate.m
// Calculator
#import "CalculatorAppDelegate.h"
#import "CalculatorViewController.h"
@implementation CalculatorAppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}
- (void)applicationWillResignActive:(UIApplication *)application
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
}
- (void)applicationWillTerminate:(UIApplication *)application
{
}
- (void)dealloc
{
}
@end
// CalculatorViewController.h
// Calculator
#import <UIKit/UIKit.h>
@interface CalculatorViewController : UIViewController
@end
// CalculatorViewController.m
// Calculator
#import "CalculatorViewController.h"
#import "CalculatorEngine.h"
@implementation CalculatorViewController
// This was wrong here. Now moved to viewDidLoad().
//CalculatorEngine *CalcEng;
//CalcEng = [[CalculatorEngine alloc] init];
// trouble here. CalcEng is unknow.
-(IBAction)buttonPressed:(id)sender {
[CalcEng setRegisterX:1];
}
- (void)viewDidLoad
{
CalculatorEngine *CalcEng;
CalcEng = [[CalculatorEngine alloc] init];
[super viewDidLoad]
}
- (void)didReceiveMemoryWarning
{
}
- (void)viewDidUnload
{
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
}
@end
// CalculatorEngine.h
// Calculator
#import <Foundation/Foundation.h>
@interface CalculatorEngine : NSObject
@end
// CalculatorEngine.m
// Calculator
#import "CalculatorEngine.h"
@implementation CalculatorEngine
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
@end