如何解决此循环依赖?

Bea*_*red 16 iphone ipad ios

我是iOS开发的新手,我遇到了头文件的问题.我的头文件遇到循环依赖问题.我的应用程序委托类包含一个指向我的视图控制器,因为我必须设置视图控制器的特性之一,在我的didFinishLaunchingWithOptions方法...

//appDelegate.h     //DISCLAIMER: THIS IS UNTESTED CODE AND WRITTEN ON THE FLY TO ILLUSTRATE MY POINT
#import <UIKit/UIKit.h>
#import "MyViewController.h"

@interface appDelegate

     NSManagedObjectContext *managedObjectContext;

     MyViewController *viewController;
     BOOL myFlag;

@end

//appDelegate.m
@implementation appDelegate

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
     viewController.managedObjectContext = self.managedObjectContext;
     .
     .
     .
}
@end
Run Code Online (Sandbox Code Playgroud)

在我的视图控制器中,我引用了"myFlag"属性,这是我的app委托...

//MyViewController.h                                        
#import "appDelegate.h"     //<---circular dependency, causing "Expected specifier-qualifier-list before MyViewController" errors in my appDelegate header file

@interface MyViewController: UIViewController
{
     NSManagedObjectContext *managedObjectContext;
}
@end

//MyViewController.m
@import "MyViewController.h"

@implementation MyViewController

- (void)viewWillAppear:(BOOL)animated
{
     [super viewWillAppear:animated];

     ((appDelegate*)[[UIApplication sharedApplication] delegate]).myFlag = NO;
}

@end
Run Code Online (Sandbox Code Playgroud)

但是为了访问我的app委托中的"myFlag"属性,我需要导入app delegate的头文件.这就是导致循环依赖的原因.不知道如何解决这个问题,有没有人碰到这个?

在此先感谢您的帮助!

ken*_*ytm 18

不要#import "MyViewController.h"进去appDelegate.h.相反,向前声明该类.

@class MyViewController;

@interface appDelegate

     NSManagedObjectContext *managedObjectContext;

     MyViewController *viewController;
     BOOL myFlag;

@end
Run Code Online (Sandbox Code Playgroud)

此外,您不必#import "appDelegate.h"MyViewController.h,如果你需要的是引用myFlag的财产实施.而是将其导入MyViewController.m文件中.