1

我正在将照片上传到 Facebook 应用程序,我认为我的 .h 文件中需要两个 @interfaces 用于我的视图控制器。

这是我的 ViewController.h 文件。

#import <UIKit/UIKit.h>
#import <Social/Social.h>
@interface FirstViewController : UIViewController <UIImagePickerControllerDelegate,   UINavigationControllerDelegate> {
UIImagePickerController *bailey;
UIImagePickerController *baileys;
UIImage *image;
IBOutlet UIImageView *imageView;
}
-  (IBAction)TakePhoto;
-  (IBAction)ChooseExisting;
@end
@interface FirstViewController : UIViewController {   SLComposeViewController       *slComposeViewController;
UIImage *image; }
- (IBAction)ShareFB;
@end

当我尝试将此代码构建到我的 iPhone 或模拟器上时,它说

/Users/Condrum/Desktop/project/myApp/myApp/FirstViewController.h:21:1: Duplicate interface definition for class 'FirstViewController'

在此先感谢您的帮助。

- 矛盾。

4

1 回答 1

4

该模式是将单个公共接口放入 .h 文件中:

@interface FirstViewController : UIViewController

// in here put those public properties and method declarations that
// other classes need to have access to

@end

然后将第二个@implementation放在 .m 文件中作为私有类扩展名

@interface FirstViewController () <UIImagePickerControllerDelegate,   UINavigationControllerDelegate>

// in here, place those private properties and instance variables that
// only this class needs to be aware of

@end

请注意,第二个接口使用的()语法表明该接口正在扩展先前定义的接口。

但是将这两个接口放在同一个 .h 文件中是没有意义的(为什么有两个接口;将它们组合成一个会更合乎逻辑)。私有类扩展的主要价值是你可以用只有实现关心的细节来扩展你的接口,避免弄乱你漂亮的简单公共接口。所以一般来说,将公共接口保留在 .h 文件中,并将私有内容移动到 .m 文件中的类扩展名中。

有关详细信息,请参阅类扩展扩展内部实现

于 2013-10-03T03:03:34.707 回答