与属性名称和数据的关系?

时间:2012-07-02 22:51:25

标签: objective-c xcode

在数据的许多用途中,有一件事让我感到困惑。 CoreData中的EG和NSManagedObject子类的属性名称与CoreData属性中的属性相同。类似的事情继续发生在NSXMLParser上。

这是为什么?它让我感到困惑,因为我从未看到使用属性名称的字符串。当NSLoging获取一个获取请求对象时,

    "<Person: 0x6d5be20> (entity: Person; id: 0x6d5dce0 <x-coredata://6800B6A5-87AF-46B4-9836-9D412A9B3EE4/Person/p1> ; data: {\n    age = 51;\n    firstName = Anthony;\n    lastName = Robbins;\n})",

作为数组元素之一。我不希望有任何不同。

但是在教程中,当我使用

遍历数组时
    for (Person *thisPerson in persons)

(thisPerson是具有神秘属性的数据对象)。属性名称似乎已按名称排序。

            NSLog(@"First Name = %@", thisPerson.firstName);

为什么会这样?当然,需要一连串的NSRegex表达式和字符串修改来推断这些数据。

1 个答案:

答案 0 :(得分:0)

对于Core Data( NSXMLParser),Core Data只使用属性名称来查找模型中的相应属性。如果您使用lastName访问NSManagedObject个实例上的foo.lastName,则不应执行

-(NSString *)lastName

这将导致NSObject类回退到NSKeyValueCoding,这会将该调用转换为

[foo valueForKey:@"lastName"]

NSManagedObject类会覆盖-valueForKey:(以及其他NSKeyValueCoding相关方法)并使用它来通过NSPersistentStoreCoordinator访问数据。