无法在sharkORM中使用一对多关系

时间:2017-04-10 10:18:56

标签: ios json orm model key-value

我正在使用KeyValueObjectMapping将JSON字符串转换为Model类。

这是JSON字符串:

@interface User : SRKObject
@property(nonatomic, strong) NSString *idStr;
@property(nonatomic, strong) NSString *name;
@property(nonatomic, strong) BOOL protected;
@property(nonatomic, strong) NSDate *createdAt;

@property(nonatomic, strong) NSArray *tweets;

@end

我为此创建了模型类,如下所示:

对于用户,

@interface Tweet : SRKObject

@property(nonatomic, strong) NSString *idStr;
@property(nonatomic, strong) NSString *text;
@property(nonatomic, strong) NSDate *createdAt;
@property(nonatomic, strong) Comments *comments;

@end

对于推文,

@interface Comments : SRKObject

@property(nonatomic, strong) NSString *idStr;
@property(nonatomic, strong) NSString *text;

@end

征求意见,

{{1}}

它工作得非常好,我正在接收数组中的推文。我收到tweet as user.tweets。

要将其保存在数据库中,我正在使用SharkORM进行ORM。但是在保存崩溃或者根本不保存推文的同时也是如此。

以下是在repo中打开的问题(但使用了不同的示例) - https://github.com/sharksync/sharkorm/issues/78

2 个答案:

答案 0 :(得分:1)

崩溃的原因是存储在User对象中的Tweets数组的持久性,而不是将它们存储为单独的类。请参阅:This

最终你最终想要的是......

@interface Tweet : NSObject

@property(nonatomic, strong) User* user;
@property(nonatomic, strong) NSString *idStr;
@property(nonatomic, strong) NSString *text;
@property(nonatomic, strong) NSDate *createdAt;

@end

将所有推文存储在数组对象中只会快速打结(不进行搜索,不断增加保存时间)。

因此,当你获得JSON时,你可以映射第一个类没问题,然后迭代推文创建与User类相关的对象。

关联对象只是将.user属性设置为您创建或查询的相关用户实体的情况。

答案 1 :(得分:1)

感谢@Adrian_H的努力。我找到了解决方案并在这里发帖。

我在Tweet&中添加了以下代码注释模型将推文保存为NSArray,将注释保存为模型对象并且有效。

- (void)encodeWithCoder:(NSCoder *)aCoder;
-(id)initWithCoder:(NSCoder *)aDecoder;