2012-05-15 1 views
1

Я создал этот класс, чтобы хранить Rss каналы о Cd-румов:Чтение NSObject свойство внутри NSArray

CdObject.h

@interface CdObject : NSObject{ 


NSString *title,*artist,*country,*company,*price,*year; 

} 

@property(nonatomic,retain)NSString *title,*artist,*country,*company,*price,*year; 

CdObject.m

#import "CdObject.h" 

@implementation CdObject 
@synthesize title,artist,country,company,price,year; 

@end 

Затем при разборе xml Я создаю новые экземпляры этого класса, заполняя их свойства (title, artist ect ..) и нажимая их в NSMutableArray (cdListArray)

Как я мог прочитать свойство одного из этих объектов изнутри cdListArray?

Ex:NSLog(@"%@",[cdListArray objectAtIndex:0].title) ??? 

ответ

1

Попробуйте NSLog(@"%@",((CdObject*)[cdListArray objectAtIndex:0]).title)

+0

Я попытался это говорит «свойство„название“не найден на объект типа" ид» .. но я думаю, что я пропустил скобку =) – luca

0

Я думаю, что вам нужно бросить:

NSLog(@"%@",[(CdObject *)[cdListArray objectAtIndex:0]] title); 
1

Вы просто бросить его на объект, который вы хотите. Если вы параноик о типе casting таким образом, вы также можете проверить класс объекта перед трансляцией.

Ex:

NSObject *firstObject = [cdListArray objectAtIndex:0]; 
if ([firstObject isKindOfClass:[CdObject class]]) 
{ 
    CdObject* cdFirstObject = (CdObject*)firstObject; 
    NSLog(@"%@", cdFirstObject.title; 
} 
3

ИМХО, Simples путь во всех таких случаях valueForKey: и это брат valueForKeyPath:

+0

какая разница между этими двумя – luca

+0

valueForKey: читает одно свойство объекта, valueForKeyPath: может читать свойство любого подзаголовка и любой глубины. Например, с первым вы можете прочитать [[cdListArray objectAtIndex: 0] valueForKey: @ "title"] и со вторым [[cdListArray objectAtIndex: 0] valueForKeyPath: @ "item.subitem.subsubitem.title"]. – Gobra