Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C-避免导入循环_Ios_Objective C_Import - Fatal编程技术网

Ios 目标C-避免导入循环

Ios 目标C-避免导入循环,ios,objective-c,import,Ios,Objective C,Import,我想连接我的两个类,并用每个类的一个属性相互链接。我详细分析了这个例子的主要方面: Ocean.h文件: #import <Foundation/Foundation.h> #import "Fish.h" @interface Ocean : NSObject @property (nonatomic) NSArray *listOfFishesInOcean; @end #import <Foundation/Foundation.h> @class Fish;

我想连接我的两个类,并用每个类的一个属性相互链接。我详细分析了这个例子的主要方面:

Ocean.h文件:

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

@interface Ocean : NSObject
@property (nonatomic) NSArray *listOfFishesInOcean;
@end
#import <Foundation/Foundation.h>
@class Fish;

@interface Ocean : NSObject
@property (nonatomic) NSArray *listOfFishesInOcean;
@end
#导入
#进口“Fish.h”
@接口:NSObject
@不动产(非原子)NSArray*中国海洋名录;
@结束
Fish.h文件:

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

@interface Fish : NSObject
@property (nonatomic) Ocean *homeOcean;    // Compiler: "Unknown type name Ocean"
@property (nonatomic) int age;
@end
#import <Foundation/Foundation.h>
@class Ocean;

@interface Fish : NSObject
@property (nonatomic) Ocean *homeOcean;    
@property (nonatomic) int age;
@end
#导入
#导入“Ocean.h”
@接口Fish:NSObject
@不动产(非原子)海洋*homeOcean;//编译器:“未知类型名”
@属性(非原子)整数;
@结束
最后,我想做的是操作Fish对象的age属性,并能够保存它(ListOfficeSinocean,NSUserDefaults),以及在保存完成时调用Ocean对象中的函数。这样,我的海洋对象列表中总是有最新的鱼类对象列表

我的两个问题是:

  • 我认为,如何避免导致编译器错误的错误
  • 最后,我应该如何实施“保存和操作”工作流
  • 我曾想过用通知和观察者来解决这个问题,但这样我仍然需要以任何方式过滤通知,因为我有多个海洋,有更多的鱼。 解决这个问题的另一个想法是给每个海洋对象和鱼对象一个ID,我将再次使用它作为NSUserDefaults中的键


    如果有人对此有想法或其他想法,欢迎您

    我认为最好的方法之一是使用标识符,这样可以提高性能

    @interface Ocean : NSObject
    @property (nonatomic) int identifier;
    @property (nonatomic) NSArray *listOfFishesInOcean;
    @end
    
    @interface Fish : NSObject
    @property (nonatomic) int age;
    @property (nonatomic) int parent_identifier;
    @end
    
    如果您想保持您的方法:

    #import <Foundation/Foundation.h>
    @class Ocean;
    
    @interface Fish : NSObject
    @property (nonatomic) Ocean *homeOcean;    // Compiler: "Unknown type name Ocean"
    @property (nonatomic) int age;
    @end
    
    仅在“.m”文件中导入“.h”文件,如:

    Ocean.h文件:

    #import <Foundation/Foundation.h>
    #import "Fish.h"
    
    @interface Ocean : NSObject
    @property (nonatomic) NSArray *listOfFishesInOcean;
    @end
    
    #import <Foundation/Foundation.h>
    @class Fish;
    
    @interface Ocean : NSObject
    @property (nonatomic) NSArray *listOfFishesInOcean;
    @end
    
    Fish.h文件:

    #import <Foundation/Foundation.h>
    #import "Ocean.h"
    
    @interface Fish : NSObject
    @property (nonatomic) Ocean *homeOcean;    // Compiler: "Unknown type name Ocean"
    @property (nonatomic) int age;
    @end
    
    #import <Foundation/Foundation.h>
    @class Ocean;
    
    @interface Fish : NSObject
    @property (nonatomic) Ocean *homeOcean;    
    @property (nonatomic) int age;
    @end
    

    我写了一个关于first的建议,并在结尾处回答了您的问题。创建一个头文件(Constants.h)并导入其中的所有文件,然后只需导入该文件,或者您可以导入
    .pch
    文件中的文件,默认情况下,该文件在所有类中都可以访问。非常感谢这两个解决方案,现在它可以工作了!另一个与IDs使用相关的主题是,当我保持我的方法并将海洋对象保存在NSUserDefaults(->encodeWithCoder)中,海洋将再次在Fish中调用encodeWithCoder时会发生什么。这将导致一个循环,因为我认为每个类中都有这两个属性,不是吗?我建议使用核心数据,因为用户默认值用于bool标志等小而快的数据。