// // MOAnchorTaskData.m // // Created by SuperCabbage on 2024/6/2 // Copyright (c) 2024 __MyCompanyName__. All rights reserved. // #import "MOAnchorTaskData.h" #import "MOTasksBiGo.h" NSString *const kMOAnchorTaskDataMinute = @"minute"; NSString *const kMOAnchorTaskDataTasksBiGo = @"tasks"; @interface MOAnchorTaskData () - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict; @end @implementation MOAnchorTaskData @synthesize minute = _minute; @synthesize tasksBiGo = _tasksBiGo; + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict { return [[self alloc] initWithDictionary:dict]; } - (instancetype)initWithDictionary:(NSDictionary *)dict { self = [super init]; // This check serves to make sure that a non-NSDictionary object // passed into the model class doesn't break the parsing. if (self && [dict isKindOfClass:[NSDictionary class]]) { self.minute = [[self objectOrNilForKey:kMOAnchorTaskDataMinute fromDictionary:dict] doubleValue]; NSObject *receivedMOTasksBiGo = [dict objectForKey:kMOAnchorTaskDataTasksBiGo]; NSMutableArray *parsedMOTasksBiGo = [NSMutableArray array]; if ([receivedMOTasksBiGo isKindOfClass:[NSArray class]]) { for (NSDictionary *item in (NSArray *)receivedMOTasksBiGo) { if ([item isKindOfClass:[NSDictionary class]]) { [parsedMOTasksBiGo addObject:[MOTasksBiGo modelObjectWithDictionary:item]]; } } } else if ([receivedMOTasksBiGo isKindOfClass:[NSDictionary class]]) { [parsedMOTasksBiGo addObject:[MOTasksBiGo modelObjectWithDictionary:(NSDictionary *)receivedMOTasksBiGo]]; } self.tasksBiGo = [NSArray arrayWithArray:parsedMOTasksBiGo]; } return self; } - (NSDictionary *)dictionaryRepresentation { NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; [mutableDict setValue:[NSNumber numberWithDouble:self.minute] forKey:kMOAnchorTaskDataMinute]; NSMutableArray *tempArrayForTasksBiGo = [NSMutableArray array]; for (NSObject *subArrayObject in self.tasksBiGo) { if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) { // This class is a model object [tempArrayForTasksBiGo addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]]; } else { // Generic object [tempArrayForTasksBiGo addObject:subArrayObject]; } } [mutableDict setValue:[NSArray arrayWithArray:tempArrayForTasksBiGo] forKey:kMOAnchorTaskDataTasksBiGo]; return [NSDictionary dictionaryWithDictionary:mutableDict]; } - (NSString *)description { return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]]; } #pragma mark - Helper Method - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict { id object = [dict objectForKey:aKey]; return [object isEqual:[NSNull null]] ? nil : object; } #pragma mark - NSCoding Methods - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; self.minute = [aDecoder decodeDoubleForKey:kMOAnchorTaskDataMinute]; self.tasksBiGo = [aDecoder decodeObjectForKey:kMOAnchorTaskDataTasksBiGo]; return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeDouble:_minute forKey:kMOAnchorTaskDataMinute]; [aCoder encodeObject:_tasksBiGo forKey:kMOAnchorTaskDataTasksBiGo]; } - (id)copyWithZone:(NSZone *)zone { MOAnchorTaskData *copy = [[MOAnchorTaskData alloc] init]; if (copy) { copy.minute = self.minute; copy.tasksBiGo = [self.tasksBiGo copyWithZone:zone]; } return copy; } @end