2010-09-05 65 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