JSON:
"id": 13
"is_main": 1
"topic_id": 1
"images": [
0: {
"id": 188
"title": "One
}
0: {
"id": 192
"title": "Two"
}
]
所以在JSON答案中有一个带有两个对象的数组。 My Realm模型看起来像:
@interface NewsRO : RLMObject
@property NSNumber <RLMInt> *newsID;
@property BOOL isMainNews;
@property NSNumber <RLMInt> *topicID;
@property NSArray *newsImages;
@property RLMArray <NewsImagesRO *><NewsImagesRO> *storedNewsImagesRO;
@end
并实施:
#import "NewsRO.h"
@implementation NewsRO
+ (NSString *)primaryKey
{
return @"newsID";
}
+ (NSArray<NSString *> *)ignoredProperties
{
return @[@"newsImages"];
}
- (void)setNewsImages:(NSArray *)newsImages
{
for (NSDictionary *dict in newsImages)
{
dispatch_sync(dispatch_queue_create("checkCashedImage", 0), ^{
NewsImagesRO *cashedObject = [NewsImagesRO objectForPrimaryKey:dict[[NKVHelper sharedInstance].kID]];
if ( cashedObject == nil || [cashedObject.newsImagePath isEqual:dict[[NKVHelper sharedInstance].kImagePath]] == NO )
{
NewsImagesRO *newsImage = [[NewsImagesRO alloc]init];
newsImage.newsImageID = dict[[NKVHelper sharedInstance].kID];
newsImage.newsImagePath = dict[[NKVHelper sharedInstance].kImagePath];
newsImage.newsImageTitle = dict[[NKVHelper sharedInstance].kImageTitle];
newsImage.newsImageWidth = dict[[NKVHelper sharedInstance].kImageWidth];
newsImage.newsImageHeight = dict[[NKVHelper sharedInstance].kImageHeight];
[self.storedNewsImagesRO addObject:newsImage];
}
});
}
}
- (NSArray *)newsImages {
return [self valueForKey:@"storedNewsImagesRO"];
}
@end
问题:
1)如何更好地将JSON数组解析为领域?
2)当我按自己的方式解析JSON时,我应该检查缓存的值吗?
答案 0 :(得分:1)
您可以使用某些第三方框架来解析JSON,例如ObjectMapper,另请参阅https://github.com/realm/realm-cocoa/issues/694#issuecomment-144785299了解其他框架。
您可以使用-addOrUpdateObject:
方法更新具有主键的对象,请参阅docs中的更多信息。