64位警告/错误:不兼容的指针类型传递" ** int"参数类型' unsigned int'

时间:2014-05-27 11:01:03

标签: objective-c ios7 64-bit exc-bad-access

我写了这个方法,当我在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];

请问你帮我解决这个崩溃吗?   非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

objc_property_t * class_copyPropertyList(Class cls, unsigned int *outCount)

期望指向unsigned int的指针作为最后一个参数,因此您必须替换

NSUInteger *raw_propertyCount;

通过

unsigned int raw_propertyCount;

在32位iOS平台上,指针和int具有相同的大小,因此它 只是偶然地工作。