Objective-C: NSClassFromString () использовать с контроллером навигации? - PullRequest
0 голосов
/ 22 августа 2011

Я хочу использовать NSClassFromString () для передачи строки, которая будет определять, какой класс помещается на контроллер nav. Проблема в том, что я хочу передать значение этому классу, что вызывает ошибку, а также попытка протолкнуть контроллер представления вызывает ошибку, поскольку NSObject не является классом типа UIViewController.

Class screenClass = NSClassFromString(screen.name);
NSObject* newClass = [[screenClass alloc] init];
newClass.asset = asset; // Causes errors because asset not in NSObject
[self.navigationController pushViewController:newClass animated:YES];// newClass is an NSObject
[newClass release];

Есть ли лучший способ сделать то, что я пытаюсь здесь?

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Вы могли бы просто сделать

UIViewController *newObject = (UIViewController *)[[screenClass alloc] init];

Тогда предупреждения будут удалены.

1 голос
/ 22 августа 2011

Вы не можете использовать точечную запись, если не можете статически ввести переменную.Если все все возможные классы происходят от одного общего класса, который объявляет метод, вы можете статически ввести его как этот класс.В противном случае вам потребуется использовать метод доступа для свойства asset:

Class screenClass = NSClassFromString(screen.name);
id newClass = [[screenClass alloc] init]; // note that it's an id to indicate that we don't know what it'll be more specifically than an object
[newClass setAsset:asset];
[self.navigationController pushViewController:newClass animated:YES];
[newClass release];

Предполагается, что для свойства asset установлено значение setAsset: (как обычно и будет).

...