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

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • julioissk84life

    julioissk84l

    18 ŞUBAT 2008
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006