2016-08-07 6 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 파일 모두에 다른 .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