我写了这个方法,当我在32位运行arhitecture时一切都很好,但是当我在64Bit上运行项目时,我收到警告,我的应用程序崩溃并出现错误:“Exc_bad_access(code = 1 address = 0x0)”。
这是我的方法:
+ (NSArray*) getFieldsForClass:(Class)class
{
static NSCharacterSet* commaset;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
commaset = [NSCharacterSet characterSetWithCharactersInString:@","];
});
NSUInteger *raw_propertyCount;
objc_property_t* raw_properties = class_copyPropertyList(class, &raw_propertyCount);
NSMutableArray* properties = [NSMutableArray new];
for (int i=0; i<raw_propertyCount; i++) {
NSString* propertyName = [NSString stringWithCString:property_getName(raw_properties[i]) encoding:NSUTF8StringEncoding];
[properties addObject:propertyName];
}
free(raw_properties);
return properties;
}
应用程序在此行崩溃:
NSString * propertyName = [NSString stringWithCString:property_getName(raw_properties [I]) 编码:NSUTF8StringEncoding];
请问你帮我解决这个崩溃吗? 非常感谢你的帮助。
答案 0 :(得分:3)
objc_property_t * class_copyPropertyList(Class cls, unsigned int *outCount)
期望指向unsigned int
的指针作为最后一个参数,因此您必须替换
NSUInteger *raw_propertyCount;
通过
unsigned int raw_propertyCount;
在32位iOS平台上,指针和int具有相同的大小,因此它 只是偶然地工作。