大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > IOS技巧 > OC反射机制获得该类全部属性并创建数据表

OC反射机制获得该类全部属性并创建数据表

关键词:该类反射数据表属性机制  阅读(962) 赞(11)

[摘要]本文是对OC反射机制获得该类全部属性并创建数据表的讲解,对学习IOS苹果软件开发有所帮助,与大家分享。

1. 首先我们要知道,这使用的是运行时的反射机制

所以我们需要头文件 runtime.h

 - (BOOL) createTableByClassAttributes: (id)classModel {
     
     // 得到类名 当表名、  也为了下边的反射、
     NSString *className = NSStringFromClass([classModel class]);
     
     // 初始化一个装sql的可变string
     NSMutableString * sqlQuery = [NSMutableString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (", className];
     
     const char * cClassName = [className UTF8String];
     
     id classM = objc_getClass(cClassName);
     // i 计数 、  outCount 放我们的属性个数
     unsigned int outCount, i;
     // 反射得到属性的个数 、
     objc_property_t * properties = class_copyPropertyList(classM, &outCount);
     
     // 循环 得到属性名称  拼接数据库语句
     for (i = 0; i < outCount; i++) {
         objc_property_t property = properties[i];
         // 获得属性名称
         NSString * attributeName = [NSString stringWithUTF8String:property_getName(property)];
         
         if (i == outCount - 1) {
             [sqlQuery appendFormat:@"%@ TEXT)", attributeName];
             break;
         }
         // 开始做拼接
         [sqlQuery appendFormat:@"%@ TEXT, ", attributeName];
     }
     
     if ([self openDatabase] == YES) {
         
         char * error;
         int result = sqlite3_exec(_db, [sqlQuery UTF8String], NULL, NULL, &error);
         if (result == SQLITE_OK) {
             return YES;
         } else {
             NSLog(@"%@", [self errorWithMessage:[NSString stringWithFormat:@"%s", error]]);
             return NO;
         }
     } else {
         NSLog(@"%@", [self errorWithMessage:@"openDB Failure"]);
         return NO;
     }
 }

// 当然 这是在数据库中写的, 你可能需要导入libsqlite这个库并创建数据库才能看见他的真正效果

ps: 运行时,我们可以得到某个类的全部属性,包括属性名称,值, 类型, 同事也可以得到方法的名称。

这里用的是纯c的语言。

这里讲反射, 主要是给大家讲一下这一种思路。



相关评论