在数据的许多用途中,有一件事让我感到困惑。 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表达式和字符串修改来推断这些数据。
答案 0 :(得分:0)
对于Core Data(不 NSXMLParser),Core Data只使用属性名称来查找模型中的相应属性。如果您使用lastName
访问NSManagedObject
个实例上的foo.lastName
,则不应执行
-(NSString *)lastName
这将导致NSObject类回退到NSKeyValueCoding
,这会将该调用转换为
[foo valueForKey:@"lastName"]
NSManagedObject
类会覆盖-valueForKey:
(以及其他NSKeyValueCoding
相关方法)并使用它来通过NSPersistentStoreCoordinator
访问数据。