2016-08-07 14 views
0

Ich kompiliere Code, um den Zyklus zu vermeiden, wenn ich weak verwende, habe ich diesen Fehler: 1. property of weak attribute must be of object type; 2. Unknown type name 'OrderEntry'. Was ist falsch an dem Code? Vielen Dank!Warum funktioniert der Code nicht, um zirkuläre Referenzen zu vermeiden?

// 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 

Antwort

0

Das Problem ist, mit beiden H-Dateien jeweils die andere darunter. Dies verursacht eine zirkuläre Abhängigkeit von den Deklarationen. Die einfache Lösung besteht darin, Vorwärtsdeklarationen zu verwenden.

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 

Dann importieren Sie die H-Dateien in der .m-Datei.

Die allgemeine Richtlinie besteht darin, möglichst wenige .h-Dateien in eine andere .h-Datei zu importieren. Verwenden Sie nach Möglichkeit Vorwärtsdeklarationen für Klassen und Protokolle.

+0

Vielen Dank! Es funktioniert! Und danke für die allgemeine Richtlinie. – developermike

Verwandte Themen