2012-02-11 3 views
3

В настоящее время я новичок в разработке в xcode, и мне интересно, как получить доступ к полям объекта, находящемуся внутри другого объекта (т. Е. Автомобильный объект внутри Vehicle Object).Objective-C: Доступ к полю объекта в объекте

для моего метода cellForRowAtIndexPath, я пытаюсь получить доступ к полю внутри моего класса пациента, который находится внутри моего класса приема. У меня есть массив [myList], который содержит объекты допуска и в объектах допуска, у меня есть объекты пациента.

Вот код, где у меня возникли проблемы, в моем методе cellForRowAtIndexPath:

static NSString *CellIdentifier = @"SimpleCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    NSUInteger row = [indexPath row]; 
    cell.textLabel.text = [[admList objectAtIndex:row]admPatName]; 
    return cell; 
} 

Проблема в этой строке ниже:

cell.textLabel.text = [[myList objectAtIndex:row]??]; 

на ?? я не мог понять правильную ссылку на поле.

Любые предложения?

Благодаря JR

+0

Не могли бы вы отправить сообщение ваш класс пациента из файла .h? – dasblinkenlight

+0

Объекты Object-C не могут напрямую обращаться к полям, принадлежащим другому объекту. (Как и в общедоступных членах C++). Вместо этого вам нужно отправить сообщение другому [otherObj getFoo] или как свойство otherObj.foo. – seand

ответ

1

Как это:

cell.textLabel.text = [[[myList objectAtIndex:row] patient] name]; 

Или, если вы предпочитаете, например:

Admission *admission = [myList objectAtIndex:row]; 
cell.textLabel.text = admission.patient.name; 

Я предполагаю, что проблема у вас было то, что точка синтаксис Безразлично 'непосредственно работаем над [myList objectAtIndex: row], потому что компилятор не знает, что это за объект.

Обычно вы можете использовать синтаксис точки или [...] в Objective-C, поэтому, если синтаксис точки не работает, попробуйте квадратные скобки. Для чего это стоит, вы могли бы заставить его работать с точечным синтаксисом литья объекта массива, но это немного неаккуратно со всеми уголками:

cell.textLabel.text = ((Admission *)[myList objectAtIndex:row]).patient.name; 
+0

Должен работать синтаксис, кроме автоматического завершения кода. –

+1

Я так не думаю. Всякий раз, когда я это пробовал, компилятор жаловался на предупреждение типа «свойство foo, не найденное на объекте идентификатора типа», потому что объекты массива имеют неопределенный тип. –

0

Если я правильно понимаю, ваши классы выглядеть примерно так:

@interface Patient : NSObject { 
    NSString *name; 
} 

@property (nonatomic, copy) NSString *name; 

@end 


@interface Admission : NSObject { 
    Patient *patient; 
} 

@property (nonatomic, retain) Patient *patient; 

@end 

и у вас есть массив (admList) объектов приема. Вот как вы бы получить доступ к имени пациента, который ссылается допуску с индексом i в массиве:

[[[admList objectAtIndex:i] patient] name] 

В качестве альтернативы:

Admission *admission = [admList objectAtIndex:i]; 
cell.textLabel.text = admission.patient.name; 

или:

cell.textLabel.text = [admList objectAtIndex:i].patient.name; 

+0

Если вы попробуете последний, я думаю, вы обнаружите, что он не работает. –

+0

@NickLockwood: вы правы, это превращает компилятор, рассматривая это как ошибку, а не предупреждение, как я изначально думал. –

+0

Это должно работать, хотя: [[admList objectAtIndex: i] patient] .name –

Смежные вопросы