2010-09-05 61 views
0

我有一些实体为我的程序保存值。 例如一个“人”实体综合了“姓名”,“年龄”,“地址”等值的属性。在Objective C类中构建“printMe”方法?

我希望在实体上构建一个“printMe”方法,以便调用此方法导致上述属性被打印到控制台,如“\ nPropertyName:Value”。

我以前用这样的核心数据实体的做到了这一点:

- (void) printMe { 

NSEntityDescription *entity = [NSEntityDescription entityForName:@"NewAirline" inManagedObjectContext:[self managedObjectContext]]; 

for (NSString *attr in [entity attributesByName]) { 
    //[object setValue:@"n/a" forKey:attr]; 

    NSLog(@"%@:%@", attr, [self valueForKey:attr]); 
} 
NSLog(@"*************** end ***************\n");  

}

实体我已经在这种情况下,没有核心数据,我不能使用attributesByName。但它应该仍然是键值兼容的,所以我想有一种解决方法。

我的实体拥有20多个属性,我希望避免通过列出每个属性并在NSLog中按名称调用它。

在此先感谢您提供的任何帮助:)

+0

您可能会考虑提供' - (NSString)描述';'方法,并避免把NSLog的东西放在你的对象中。 – 2010-09-05 11:30:56

+0

谢谢弗兰克:)这是一个非常好的主意,它当然是一些穴居人调试,并测试对象正确处理我注入到Web服务数据的对象。我永远不需要对象内的数据,它始终是NSLog([myObject description]);从拥有该对象数组的父对象。我真的不喜欢在我的对象中“乱抛垃圾”,这种方法与Objective-C的方式是一致的。 – RickiG 2010-09-05 13:55:21

回答

1

您可以使用Objective-C运行库Api。函数class_copyPropertyList为您提供给定类的所有声明属性。然后,您可以使用更多运行时功能(如property_getAttributesproperty_getName)来获取其名称等。使用该名称,您可以以符合KVC的方式访问该值。

+0

谢谢Max。我对运行时API并不熟悉,你的帮助让我足够了解它。我要混合你的答案和法兰克斯评论:) – RickiG 2010-09-05 14:21:05