RLMException',原因:' Property' productos'需要一个定义包含类型的协议 - 例如:RLMArray

时间:2018-04-06 19:58:52

标签: ios objective-c realm

所以我在我的项目中使用了一个Realm,我有一个对象,' Pedido' (订购西班牙语)有很多' V3Producto'对象,如下:

@interface V3Producto : RLMObject

@property NSString                  *codeProd; // Este es el código de barras!
@property NSString                  *codigo;
@property NSNumber<RLMDouble>       *descuento;
@property NSString                  *detailProd;
@property NSInteger     idid;
@property NSInteger     idCompania;
@property NSNumber<RLMDouble> *priceProd;
@property NSInteger     stock;

@property int      cantidadComprada;
@property int      cantidad; // cantidad de stock

&#39; Pedidos&#39;的代码(订单)

@interface Pedido:RLMObject

@property NSNumber<RLMDouble>   *idUbicacion;
@property NSString              *fechaPedido;
@property NSString              *sucursal;
@property NSNumber<RLMDouble>   *filterId;
@property RLMArray<V3Producto*>       *productos;

当我运行应用时,一旦加载我就会收到错误:&#39; RLMException&#39;,原因:&#39;属性&#39; productos&#39;需要一个定义包含类型的协议 - 例如:RLMArray&#39;这很奇怪,因为在添加RLMArray之前似乎工作得很好!任何V3Producto似乎都是完美无缺的RLMObject! 有什么想法吗?

修改 我尝试过重命名产品&#39;

,以及其他具有相同名称的线程建议但其他内容并未修复。

2 个答案:

答案 0 :(得分:1)

这是因为在声明RLMArray属性时,必须根据Realm Docs

将类型标记为符合协议的名称与其应包含的对象相同

声明RLMArray的Syntex是: -

RLM_ARRAY_TYPE(ObjectType)
@property RLMArray<ObjectType *><ObjectType> *arrayOfObjectTypes;

您的代码应该是: -

RLM_ARRAY_TYPE(V3Producto)

@interface Pedido : RLMObject
@property NSNumber <RLMDouble>   *idUbicacion;
@property NSString *fechaPedido;
@property NSString *sucursal;
@property NSNumber <RLMDouble> *filterId;
@property RLMArray <V3Producto*> <V3Producto> *productos;
@end

答案 1 :(得分:0)

声明RLMArray的正确方法如下:

RLM_ARRAY_TYPE(V3Producto)

@interface Pedido : RLMObject

@property NSNumber<RLMDouble>   *idUbicacion;
...    
@property RLMArray<V3Producto*><V3Producto>       *productosPedido;

注意我必须声明我想要用作带有MACRO的数组的类型(在第一行),并且数组的声明略有不同(你必须设置类型加上你自己的宏)。我宣布了。)