2016-08-07 9 views
0

私はweakを使用すると、このエラーが発生します:1. property of weak attribute must be of object type; 2. Unknown type name 'OrderEntry'。コードの何が間違っていますか?ありがとう!循環参照を避けるためにコードが機能しないのはなぜですか?

// OrderEntry.h 
#import <Foundation/Foundation.h> 
#import "OrderItem.h" 
#import "Address.h" 

@interface OrderEntry : NSObject 

@property (strong, nonatomic)OrderItem *orderItem; 
@property (strong, nonatomic)Address *shippingAddress; 
@property (strong, nonatomic) NSString *orderID; 

@end 


// OrderItem.h 
#import <Foundation/Foundation.h> 
#import "OrderEntry.h" 


@interface OrderItem : NSObject 

@property (strong,nonatomic) NSString *name; 

@property (weak, nonatomic) OrderEntry *entry; 

@end 

答えて

0

問題は両方の.hファイルにそれぞれ他が含まれていることです。これにより、宣言に循環依存が発生します。単純な解決策は、前方宣言を代わりに使用することです。

OrderEntry.h:

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

@class OrderItem; 

@interface OrderEntry : NSObject 

@property (strong, nonatomic) OrderItem *orderItem; 
@property (strong, nonatomic) Address *shippingAddress; 
@property (strong, nonatomic) NSString *orderID; 

@end 

OrderItem.h:

#import <Foundation/Foundation.h> 

@class OrderEntry; 

@interface OrderItem : NSObject 

@property (strong, nonatomic) NSString *name; 
@property (weak, nonatomic) OrderEntry *entry; 

@end 

次にあなたが.mファイルで.hファイルをインポートします。

一般的なガイドラインは、可能な限り少ない.hファイルを別の.hファイルにインポートすることです。可能であれば、クラスおよびプロトコルの前方宣言を使用してください。

+0

ありがとうございました!それは動きます!一般的なガイドラインに感謝します。 – developermike

関連する問題