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

1 ответ

Решение

@Implementation должен присутствовать в файле.m, а @interface - в файле.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 в View Controller, например, просто импортируйте "ProductModel.h":

#import "ProductModel.h"
Другие вопросы по тегам