Основные данные - перебирая атрибуты NSManagedObject - PullRequest
15 голосов
/ 11 декабря 2011

Я новичок в основных данных, так что здесь.

У меня есть базовый объект данных, например студент.

У ученика есть гривенные атрибуты, такие как имя, возраст, место рождения, адрес и т. Д.

Теперь мне нужно отобразить все эти атрибуты в табличном представлении.

Есть ли простой способ перебрать объект учащегося? Или мне нужно преобразовать данные в какой-нибудь словарь?

Если мне нужно преобразовать его в словарь, есть ли поддержка? Или я должен написать функцию самостоятельно.

Большое спасибо за вашу помощь, Стивен

Ответы [ 2 ]

25 голосов
/ 03 июля 2012

Вот очень простой способ перебора NSManagedObject:

NSEntityDescription *entity = [myManagedObject entity];
NSDictionary *attributes = [entity attributesByName];
for (NSString *attribute in attributes) {
    id value = [myManagedObject valueForKey: attribute];
    NSLog(@"attribute %@ = %@", attribute, value);
}

Подсказки о том, как это сделать (и многое другое), можно найти в блоге Оле Бергманна: http://oleb.net/blog/2011/05/inspecting-core-data-attributes/

17 голосов
/ 25 сентября 2015

Если вы похожи на меня и пытаетесь решить эту проблему в Swift, вот как я это сделал.

SWIFT 3:

let request:NSFetchRequest<ENTITY_NAME>
if #available(iOS 10.0, *){
    request = ENTITY_NAME.fetchRequest() as! NSFetchRequest<ENTITY_NAME>
}else{
    request = NSFetchRequest<ENTITY_NAME>(entityName: "ENTITY_NAME")
}

do{
    let entities = try YOUR_MOC.fetch(request)
    for item in entities{
        for key in item.entity.attributesByName.keys{
            let value: Any? = item.value(forKey: key)
            print("\(key) = \(value)")
        }
    }
}catch{

}

Swift 2:

   let request = NSFetchRequest(entityName: "ENTITY_NAME")
   do{
       let entities = try YOUR_MOC.executeFetchRequest(request) as! [YOUR_ENTITY]
       for item in entities{
           for key in item.entity.attributesByName.keys{
               let value: AnyObject? = item.valueForKey(key)
               print("\(key) = \(value)")
           }

       }
   }catch{

   }

Если вы также хотите получить ключ / значения сущностей отношений, вам следует использовать propertiesByName вместо attributesByName, например, так:

SWIFT 3:

for key in item.entity.propertiesByName.keys{
    let value: Any? = item.value(forKey: key)
    print("\(key) = \(value)")
}

SWIFT2:

for key in item.entity.propertiesByName.keys{
    let value: AnyObject? = item.valueForKey(key)
    print("\(key) = \(value)")
}

Просто не забудьте соблюдать осторожность со значением, поскольку оно является NSManagedObject.

...