5

プロジェクトをビルドしようとすると、XCode でビルド セマンティック エラーが発生します。NSOperationインターネットから情報をダウンロードして処理し、それを親のView Controllerに送信するための3つのクラスを設定していますViewController. 労働者階級のコードは次のとおりです。

#import <Foundation/Foundation.h>
#import "ViewController.h"

@interface ImageGetter : NSOperation

@property (nonatomic) int sid;
@property (nonatomic, retain) ViewController* pvc;

@end

動作していないコードは次のとおりです。

#import <Foundation/Foundation.h>
#import "ViewController.h"

@interface CurrentGetter : NSOperation

@property (nonatomic) int sid;
@property (nonatomic, retain) ViewController* pvc;

@end

エラー:

ERROR: Unknown type name 'ViewController'; did you mean 'UIViewController'?

このエラーが発生するのはなぜですか? 両方のファイルに ViewController.h をインポートしましたが、1 つだけが機能しています。

ViewController.h:

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/MediaPlayer.h>

#import "DataGetter.h"
#import "CurrentGetter.h"
#import "AppDelegate.h"

@interface ViewController : UIViewController <UITabBarDelegate>
{
    NSTimer* tmr;
}

@property (nonatomic) float max;
@property (nonatomic, retain) NSDictionary* plist;
@property (nonatomic, retain) NSArray* processingobj;

@property (nonatomic, retain) AVAudioPlayer* intro;
@property (nonatomic, retain) AVAudioPlayer* woop;

@property (nonatomic) float dataDone;
@property (nonatomic) BOOL introDone;
@property (nonatomic) BOOL currentDone;

@property (nonatomic) int newSid;
@property (nonatomic) int newPart;

@property (nonatomic, retain) NSMutableArray* views;

@property (nonatomic) int audioTab;
@property (nonatomic) int currentSid;
@property (nonatomic) BOOL isPlaying;

@property (nonatomic, retain) UIScrollView* partTab;
@property (nonatomic, retain) NSMutableArray* nowPlayingObj;
@property (nonatomic, retain) UINavigationBar* audioNav;

@property (nonatomic, retain) MPMoviePlayerController* player;
@property (nonatomic, retain) UILabel* elapsed;
@property (nonatomic, retain) UILabel* remaining;
@property (nonatomic, retain) UISlider* slider;
@property (nonatomic) BOOL sliderEditing;
@property (nonatomic, retain) UIButton* playBtn;

@property (nonatomic, retain) UITabBar* tabBar;

//Images

@property (nonatomic, retain) UIImage* announcement;
@property (nonatomic, retain) NSMutableArray* seriesBanners;
@property (nonatomic, retain) UIProgressView* prog;

- (void)plistDone;

@end
4

1 に答える 1

12

次のように、CurrentGetter ヘッダー ファイルでクラスの前方宣言を実行してみてください。

@class ViewController;
@interface CurrentGetter : NSOperation

これは、「ViewController」というクラスが存在することをコンパイラに伝えます。2 つのクラスが互いのインスタンスを持つ場合のように、循環依存関係がある場合、クラスの前方宣言を使用すると、結果として生じる混乱が解決されます。

于 2013-03-04T16:44:28.960 に答える