저는 iPhone 개발 및 예제에 대한 책을 많이 읽었지만 실제로 MVC가 제대로 가르쳐지지 않는다는 것을 알았습니다. (저자는 Xcode가 " 그 자체를 "MVC 코딩 방식으로 변환).Xcode 개발 MVC (Model-View-Controller) 문제
빠른 예. 나는 간단한 계산기 앱을 만들기를 원한다.
xxxxxViewController.m 파일 안에 모든 코드가 포함 된 작동 버전이 있습니다. 액션과 아웃렛이 모두 잘 작동합니다. 이 접근 방식의 문제점은 여러 개의 뷰 (일반 계산기와 공학용 계산기)를 갖고 싶으면 코드를 복사하여 붙여 넣으면서 두 가지 버전을 사용할 수 있다는 것입니다. 나는 이것을 피하려고 분명히 노력하고있다.
그래서 저는 CalculatorEngine으로 자신의 클래스 (NSObject 기반)를 만들었습니다.
CalculatorEngine을 할당하고 초기화하는 데 문제가 있습니다. "다른 유형의 CalculatorEngine 재정의"및 "유형 지정자가없는 경우 기본값은 int"와 같은 오류가 나타납니다.
나는 분명히 뭔가 빠져있는 것 같아.
xxxxViewController 안에 코드가있는 대신 별도의 클래스가 "엔진"으로 사용되는 샘플의 방향으로 나를 가리킬 수 있습니까?
이 시점에서 아래 코드는 실제로 아무 것도하지 않습니다. CalculatorViewController.m에서 사용할 수있는 CalculatorEngine 객체를 가져 오려고합니다. 이것이 내가 오류를받는 곳입니다.
// 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
이것은 Objective-C 질문입니다. iPhone과 관련이 없습니다. "유형 지정자가 누락되어 기본값이 int"인 부분은 누락 된 포함과 같습니다. 코드를 게시하거나 적어도 메소드 안에 코드를 남기지 않는 뼈대를 게시하십시오. –
샘플 코드가 원래 게시물에 포함되었습니다. – David