IOS 字典快速轉換為Model – iPhone手機開發技術文章 iPhone軟體開發教學課程

一般情況下IOS得局部頁面加載的過程是,創建一個Model然後,將Nib文件與Model進行關聯,然後能夠快速的獲取到Nib文件上的控件實例。操作生成頁面。

 

但是原生的內容是沒有直接通過Json獲取Model隻能生成字典。然後轉換為Model。下列方法就是通過字典來轉換為Model的過程。

 

 

 

將字典轉換為Model

 

復制代碼

-(BOOL)reflectDataFromOtherObject:(NSDictionary *)dic

{

    unsigned int outCount, i;

    objc_property_t *properties = class_copyPropertyList([self class], &outCount);

    

    for (i = 0; i < outCount; i++) {

        objc_property_t property = properties[i];

        NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];

        NSString *propertyType = [[NSString alloc] initWithCString:property_getAttributes(property) encoding:NSUTF8StringEncoding];

        

        if ([[dic allKeys] containsObject:propertyName]) {

            id value = [dic valueForKey:propertyName];

            if (![value isKindOfClass:[NSNull class]] && value != nil) {

                if ([value isKindOfClass:[NSDictionary class]]) {

                    id pro = [self createInstanceByClassName:[self getClassName:propertyType]];

                    [pro reflectDataFromOtherObject:value];

                    [self setValue:pro forKey:propertyName];

                }else{

                    [self setValue:value forKey:propertyName];

                }

            }

        }

    }

    

    free(properties);

    return true;

}

復制代碼

其他兩個輔助類型方法

 

復制代碼

-(NSString *)getClassName:(NSString *)attributes

{

    NSString *type = [attributes substringFromIndex:[attributes rangeOfRegex:@"\""].location + 1];

    type = [type substringToIndex:[type rangeOfRegex:@"\""].location];

    return type;

}

 

-(id) createInstanceByClassName: (NSString *)className {

    NSBundle *bundle = [NSBundle mainBundle];

    Class aClass = [bundle classNamed:className];

    id anInstance = [[aClass alloc] init];

    return anInstance;

}

復制代碼

 

 

將Model轉換為字典

 

復制代碼

-(NSDictionary *)convertModelToDictionary

{

    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];

    

    for (NSString *key in [self propertyKeys]) {

        id propertyValue = [self valueForKey:key];

        //該值不為NSNULL,並且也不為nil

        [dic setObject:propertyValue forKey:key];

    }

    

    return dic;

}

發佈留言