SORU
16 NİSAN 2009, PERŞEMBE


Objective-C nesne özellikleri bir listesini almak

Nasıl bir liste (NSArray NSDictionary şeklinde) Objective-C, belirli bir nesne öznitelikleri alabilir miyim?

Aşağıdaki senaryoyu düşünün: sadece NSString BOOL NSData bir nesne öznitelikleri gibi. bir tutan NSObject, genişleten bir üst sınıf tanımlıyorum Sonra bu üst sınıf uzanan çeşitli sınıflar, farklı özellikleri bir sürü her ekleme var.

Üzerinde bir örnek yöntemi uygulamak için hiç bir yol yokturüstbütün nesne ve döner, diyelim ki, (çocuk) sınıf her NSArray Bir geçer sınıf NSStrings olarak bağlıyordeğildaha sonra EP NSString Bu ben üst sınıf?

CEVAP
16 NİSAN 2009, PERŞEMBE


Ben sadece cevabını ben de almayı başardı. N-C çalışma Zamanı Kitaplığı'nı kullanarak, özelliklerini girmek istediğimi yolu vardı:

- (void)myMethod {
    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];
        const char *propName = property_getName(property);
        if(propName) {
            const char *propType = getPropertyType(property);
            NSString *propertyName = [NSString stringWithCString:propName
                                                                encoding:[NSString defaultCStringEncoding]];
            NSString *propertyType = [NSString stringWithCString:propType
                                                                encoding:[NSString defaultCStringEncoding]];
            ...
        }
    }
    free(properties);
}

Bu bana bir 'getPropertyType' C Elma kod örneği alınır hangi işlevi, (şu an hatırlayamıyorum tam kaynak): . yapmak gerekli

static const char *getPropertyType(objc_property_t property) {
    const char *attributes = property_getAttributes(property);
    char buffer[1   strlen(attributes)];
    strcpy(buffer, attributes);
    char *state = buffer, *attribute;
    while ((attribute = strsep(&state, ",")) != NULL) {
        if (attribute[0] == 'T') {
            return (const char *)[[NSData dataWithBytes:(attribute   3) length:strlen(attribute) - 4] bytes];
        }
    }
    return "@";
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jesse Pimenta

    Jesse Piment

    5 EKİM 2011
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • mipd1980

    mipd1980

    25 EKİM 2006