2015-06-19 46 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更具描述性的名稱。即使是故事板,隨着項目變得更加複雜,您仍然會創建自己的自定義視圖控制器子類。 –