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

  • fireflame65

    fireflame65

    27 Mart 2007
  • Kindness

    Kindness

    23 Ocak 2006
  • SPBedition

    SPBedition

    24 HAZİRAN 2013