SHARE
TWEET

Convert NSObject to NSDictionary

priore Jun 23rd, 2014 1,064 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // NSArray+NSDictionary.m
  2.  
  3. #import "NSObject+NSDictionary.h"
  4.  
  5. @implementation NSArray (NSDictionary)
  6.  
  7. - (NSDictionary*)toDictionary
  8. {
  9.     NSMutableDictionary *dict = [NSMutableDictionary new];
  10.     [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  11.         [dict setObject:[obj toDictionary] forKey:@(idx)];
  12.     }];
  13.    
  14.     return dict;
  15. }
  16.  
  17. @end
  18.  
  19. // NSObject+NSDictionary.m
  20.  
  21. #import <objc/runtime.h>
  22. @implementation NSObject (NSDictionary)
  23.  
  24. - (NSDictionary *)toDictionary {
  25.    
  26.     unsigned int count = 0;
  27.    
  28.     NSMutableDictionary *dictionary = [NSMutableDictionary new];
  29.     objc_property_t *properties = class_copyPropertyList([self class], &count);
  30.    
  31.     for (int i = 0; i < count; i++) {
  32.  
  33.         NSString *key = [NSString stringWithUTF8String:property_getName(properties[i])];
  34.         id value = [self valueForKey:key];
  35.        
  36.         if (value == nil) {
  37.             // nothing todo
  38.         }
  39.         else if ([value isKindOfClass:[NSNumber class]]
  40.             || [value isKindOfClass:[NSString class]]
  41.             || [value isKindOfClass:[NSDictionary class]]) {
  42.             // TODO: extend to other types
  43.             [dictionary setObject:value forKey:key];
  44.         }
  45.         else if ([value isKindOfClass:[NSObject class]]) {
  46.             [dictionary setObject:[value toDictionary] forKey:key];
  47.         }
  48.         else {
  49.             NSLog(@"Invalid type for %@ (%@)", NSStringFromClass([self class]), key);
  50.         }
  51.     }
  52.    
  53.     free(properties);
  54.    
  55.     return dictionary;
  56. }
  57.  
  58. @end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top