MOMemberDetailData.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //
  2. // MOMemberDetailData.m
  3. //
  4. // Created by SuperCabbage on 2024/5/30
  5. // Copyright (c) 2024 __MyCompanyName__. All rights reserved.
  6. //
  7. #import "MOMemberDetailData.h"
  8. #import "MOFanTasksList.h"
  9. #import "MOFanClubData.h"
  10. #import "MOFansList.h"
  11. #import "MOGiftCriteria.h"
  12. NSString *const kMOMemberDetailDataFanTasksList = @"tasks";
  13. NSString *const kMOMemberDetailDataFanClubData = @"club";
  14. NSString *const kMOMemberDetailDataFansList = @"member";
  15. NSString *const kMOMemberDetailDataFansGiftCriteria = @"giftCriteria";
  16. @interface MOMemberDetailData ()
  17. - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
  18. @end
  19. @implementation MOMemberDetailData
  20. @synthesize fanTasksList = _fanTasksList;
  21. @synthesize fanClubData = _fanClubData;
  22. @synthesize fansList = _fansList;
  23. @synthesize giftCriteria = _giftCriteria;
  24. + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict {
  25. return [[self alloc] initWithDictionary:dict];
  26. }
  27. - (instancetype)initWithDictionary:(NSDictionary *)dict {
  28. self = [super init];
  29. // This check serves to make sure that a non-NSDictionary object
  30. // passed into the model class doesn't break the parsing.
  31. if (self && [dict isKindOfClass:[NSDictionary class]]) {
  32. NSObject *receivedMOFanTasksList = [dict objectForKey:kMOMemberDetailDataFanTasksList];
  33. NSMutableArray *parsedMOFanTasksList = [NSMutableArray array];
  34. if ([receivedMOFanTasksList isKindOfClass:[NSArray class]]) {
  35. for (NSDictionary *item in (NSArray *)receivedMOFanTasksList) {
  36. if ([item isKindOfClass:[NSDictionary class]]) {
  37. [parsedMOFanTasksList addObject:[MOFanTasksList modelObjectWithDictionary:item]];
  38. }
  39. }
  40. } else if ([receivedMOFanTasksList isKindOfClass:[NSDictionary class]]) {
  41. [parsedMOFanTasksList addObject:[MOFanTasksList modelObjectWithDictionary:(NSDictionary *)receivedMOFanTasksList]];
  42. }
  43. self.fanTasksList = [NSArray arrayWithArray:parsedMOFanTasksList];
  44. self.fanClubData = [MOFanClubData modelObjectWithDictionary:[dict objectForKey:kMOMemberDetailDataFanClubData]];
  45. self.fansList = [MOFansList modelObjectWithDictionary:[dict objectForKey:kMOMemberDetailDataFansList]];
  46. }
  47. self.giftCriteria = [MOGiftCriteria modelObjectWithDictionary:[dict objectForKey:kMOMemberDetailDataFansGiftCriteria]];
  48. return self;
  49. }
  50. - (NSDictionary *)dictionaryRepresentation {
  51. NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
  52. NSMutableArray *tempArrayForFanTasksList = [NSMutableArray array];
  53. for (NSObject *subArrayObject in self.fanTasksList) {
  54. if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
  55. // This class is a model object
  56. [tempArrayForFanTasksList addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
  57. } else {
  58. // Generic object
  59. [tempArrayForFanTasksList addObject:subArrayObject];
  60. }
  61. }
  62. [mutableDict setValue:[NSArray arrayWithArray:tempArrayForFanTasksList] forKey:kMOMemberDetailDataFanTasksList];
  63. [mutableDict setValue:[self.fanClubData dictionaryRepresentation] forKey:kMOMemberDetailDataFanClubData];
  64. [mutableDict setValue:[self.fansList dictionaryRepresentation] forKey:kMOMemberDetailDataFansList];
  65. [mutableDict setValue:[self.giftCriteria dictionaryRepresentation] forKey:kMOMemberDetailDataFansList];
  66. return [NSDictionary dictionaryWithDictionary:mutableDict];
  67. }
  68. - (NSString *)description {
  69. return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
  70. }
  71. #pragma mark - Helper Method
  72. - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict {
  73. id object = [dict objectForKey:aKey];
  74. return [object isEqual:[NSNull null]] ? nil : object;
  75. }
  76. #pragma mark - NSCoding Methods
  77. - (id)initWithCoder:(NSCoder *)aDecoder {
  78. self = [super init];
  79. self.fanTasksList = [aDecoder decodeObjectForKey:kMOMemberDetailDataFanTasksList];
  80. self.fanClubData = [aDecoder decodeObjectForKey:kMOMemberDetailDataFanClubData];
  81. self.fansList = [aDecoder decodeObjectForKey:kMOMemberDetailDataFansList];
  82. self.giftCriteria = [aDecoder decodeObjectForKey:kMOMemberDetailDataFansList];
  83. return self;
  84. }
  85. - (void)encodeWithCoder:(NSCoder *)aCoder
  86. {
  87. [aCoder encodeObject:_fanTasksList forKey:kMOMemberDetailDataFanTasksList];
  88. [aCoder encodeObject:_fanClubData forKey:kMOMemberDetailDataFanClubData];
  89. [aCoder encodeObject:_fansList forKey:kMOMemberDetailDataFansList];
  90. [aCoder encodeObject:_giftCriteria forKey:kMOMemberDetailDataFansList];
  91. }
  92. - (id)copyWithZone:(NSZone *)zone {
  93. MOMemberDetailData *copy = [[MOMemberDetailData alloc] init];
  94. if (copy) {
  95. copy.fanTasksList = [self.fanTasksList copyWithZone:zone];
  96. copy.fanClubData = [self.fanClubData copyWithZone:zone];
  97. copy.fansList = [self.fansList copyWithZone:zone];
  98. copy.giftCriteria = [self.giftCriteria copyWithZone:zone];
  99. }
  100. return copy;
  101. }
  102. @end