2015-06-19 108 views
0

新手问题如下...默认Cocoa应用程序ViewController.m问题?

我正在学习基于Objective C的OS X Cocoa应用程序开发。我拥有的大多数书籍和视频都是针对iOS的,因此我将一些简单的iOS代码示例转换为OS X.

当我创建新的OS X“Cocoa Application”项目时,选中“use Storyboards”框,我新创建的项目中的默认ViewController.m没有@interface部分。这是预期的吗?

回复我最近的问题Cocoa ViewController.m vs. Cocoa Touch ViewController.m表示另一个用户的默认ViewController.m有一个@interface部分。

目前,我手动输入IBOutlets的@interface部分。 别人在做什么?或者我有一些配置问题?

我在优胜美地上使用Xcode 6.3.2。

这里是我的默认ViewController.m

// 
// ViewController.m 
// testME 
// 
// Created by ME on 6/19/15. 
// Copyright (c) 2015 ME. All rights reserved. 
// 

#import "ViewController.h" 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view. 
} 

- (void)setRepresentedObject:(id)representedObject { 
    [super setRepresentedObject:representedObject]; 

    // Update the view, if already loaded. 
} 

@end 

回答

1

通常的接口类(的ViewController你的情况)是在头文件(.h)中。

然而,一些开发商利用把一个类扩展以实现文件的顶部为“伪造”私有方法的一种方式的约定(该目标C没有。)

所以,你可以看到这个一个.m文件:

//The parenthesis here indicate a class extension. 
@interface ViewController() 

//Only the ViewController class sees this method. 
-(void) method; 

@end 

@implementation ViewController 

-(void) method{ 
    //Do stuff here 
} 

@end 

这不是具体到iOS或MacOS的,而是客观C. 你可以看到更多的目标C级扩展here

默认的Xcode项目不会为创建的ViewController类添加类扩展。但是,如果你创建一个新的NSViewController子类(通过File-> New-> File-> Cocoa Class,然后创建一个NSViewController子类的类,你会注意到新的NSViewController子类将会在但是这并不是必需或必需的,只是用来定义Objective C允许的专用接口的一种方式

您也可以检出this回答更多关于执行psuedo-私有方法

+0

感谢您的详细解释和两个链接,两者都非常有帮助我使用类扩展来创建一个IBOutlet实例变量private并且我创建了一个新的视图控制器,它确实有一个空的类扩展nsion @interface。那么为什么默认的ViewController没有?为什么这个“顶级”ViewController不应该有一个空的类扩展类别? – SDGary

+0

用户*是否总是*在故事板之前创建自己的ViewControllers?或者,用户通常在创建自定义名称之后删除默认的ViewController? – SDGary

+0

没有任何理由说明初始视图控制器没有类扩展名。 Xcode开发人员可能忘记将它放入生成的代码中以用于初始项目。是的,我可以说至少从个人经验,我总是删除或至少重命名默认ViewController更具描述性的名称。即使是故事板,随着项目变得更加复杂,您仍然会创建自己的自定义视图控制器子类。 –