【问题标题】:Default Cocoa Application ViewController.m issue?默认 Cocoa 应用程序 ViewController.m 问题?
【发布时间】:2015-06-19 18:19:49
【问题描述】:

新手问题如下...

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

当我创建一个新的 OS X“Cocoa 应用程序”项目并选中“使用 Storyboard”框时,我新创建的项目中的默认 ViewController.m 没有@interface 部分。这是预期的吗?

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

目前,我正在为 IBOutlets 手动输入 @interface 部分。 这就是其他人正在做的事情吗?还是我有一些配置问题?

我在 Yosemite 上使用 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

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    通常,类(在您的情况下为 ViewController)的接口位于头文件 (.h) 中。

    但是,一些开发人员使用将类扩展放在实现文件顶部的约定作为“伪造”私有方法的一种方式(Objective 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,而是针对 Objective C。 你可以看到更多关于 Objective C 类扩展here

    默认的 Xcode 项目不会为创建的 ViewController 类添加类扩展。但是,如果你创建一个新的 NSViewController 子类(通过转到 File->New->File->Cocoa Class,然后创建一个作为 NSViewController 子类的类,你会注意到新的 NSViewController 子类将在实现文件的顶部。然而,这不是必需的,只是用作定义 Objective C 允许的最接近私有接口的东西的一种方式。

    您还可以查看this 答案以获取有关实现伪私有方法的更多详细信息。

    【讨论】:

    • 感谢您的详细解释和两个链接。两者都非常有帮助。我使用类扩展将 IBOutlet 实例变量设为私有。另外,我创建了一个新的视图控制器,正如你所指出的,它确实有一个空的类扩展@interface。那么为什么默认的 ViewController 没有呢?这个“顶级” ViewController 不应该有一个空的类扩展类别有正当理由吗?
    • 用户是否总是在 Storyboard 之前创建自己的 ViewController?还是用户通常会在创建自定义名称后删除默认的 ViewController?
    • 初始视图控制器没有类扩展是没有任何原因的。 Xcode 开发人员可能只是忘记将其放入初始项目的生成代码中。是的,至少从个人经验来看,我可以说我总是删除或至少将默认 ViewController 重命名为更具描述性的名称。即使使用故事板,随着项目变得越来越复杂,您仍将创建自己的自定义视图控制器子类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多