Нельзя использовать точечный синтаксис для типов id
, поскольку компилятор не может знать, что означает x.foo
(объявленное свойство может сделать получатель другим именем, например, view.enabled -> [view isEnabled]
).
Следовательно, вам нужно использовать
[myNewsRecordOrGalleriesRecord title]
или
((NewsRecord*)myNewsRecordOrGalleriesRecord).title
Если title
и другие вещи являются общими свойствами этих двух классов, вы можете объявить протокол.
@protocol Record
@property(retain,nonatomic) NSString* title;
...
@end
@interface NewsRecord : NSObject<Record> { ... }
...
@end
@interface GalleriesRecord : NSObject<Record> { ... }
...
@end
...
id<Record> myNewsRecordOrGalleriesRecord;
...
myNewsRecordOrGalleriesRecord.title; // fine, compiler knows the title property exists.
Кстати, не используйте NSLog(xxx);
, который склонен к атака форматной строки , и вы не можете быть уверены, что xxx
действительно является строкой NSString. Вместо этого используйте NSLog(@"%@", xxx);
.