2016-07-27 21 views
0

我使用的是網絡上的相同例子jsonmodel - 型號級聯(車型包括其他型號)

OrderModel.h

@protocol ProductModel 
@end 

@interface ProductModel : JSONModel 
@property (assign, nonatomic) int id; 
@property (strong, nonatomic) NSString* name; 
@property (assign, nonatomic) float price; 
@end 

@implementation ProductModel 
@end 

@interface OrderModel : JSONModel 
@property (assign, nonatomic) int order_id; 
@property (assign, nonatomic) float total_price; 
@property (strong, nonatomic) NSArray<ProductModel>* products; 
@end 

@implementation OrderModel 
@end 

但是當我建立這個項目我面對的一個問題「重複的符號「

duplicate symbol _OBJC_CLASS_$_OrderModel 
ld: 576 duplicate symbols for architecture arm64 
clang: error: linker command failed with exit code 1 
+0

你爲什麼不兩個的.m和.h文件分割對象的文件嗎?我認爲這是問題的原因。如果你在兩個文件中導入這個頭文件,它會導致重複的符號錯誤,因爲同一個類將會有兩個實現。 – vladiulianbogdan

回答

2

@implementation應該出現在.m文件中,而@接口出現在.h文件中。

您應該只導入.h文件。否則,你將有同一個類的多個實現。

ProductModel.h:

@interface ProductModel : JSONModel 
@property (assign, nonatomic) int id; 
@property (strong, nonatomic) NSString* name; 
@property (assign, nonatomic) float price; 
@end 

ProductModel.m:

#import "ProductModel.h"  

@implementation ProductModel 
@end 

OrderModel.h:

@interface OrderModel : JSONModel 
@property (assign, nonatomic) int order_id; 
@property (assign, nonatomic) float total_price; 
@property (strong, nonatomic) NSArray<ProductModel>* products; 
@end 

OrderModel.m

#import "OrderModel.h" 

@implementation OrderModel 
@end 

如果你想使用的產品型號中的類視圖控制器,例如只需導入「ProductModel.h」:

#import "ProductModel.h" 
+0

根據文檔ProductModel應該是一個協議,不是嗎? – Ricardo

+0

從我從JSONModel文檔中瞭解到,您需要使用@protocol ProductModel:@屬性(強,非原子)NSArray * products ;.你可以在ProductModel.h中定義協議,一切都會好的。 – vladiulianbogdan