Попытка перезагрузить данные моего parentViewController, но не удается - PullRequest
0 голосов
/ 18 декабря 2009

Попытка [self.parentViewController.tableView reloadData] из метода save: в моем DetailViewController, но получение моей любимой ошибки: запрос на член 'tableView' в чем-то, что не является структурой или объединением.

Включил заголовок для моего RootViewController и преобразовал parentViewController в качестве RootViewController безрезультатно.

Что я испортил?

Ответы [ 3 ]

2 голосов
/ 18 декабря 2009

При проектировании было бы плохой идеей, чтобы один контроллер отправлял сообщения непосредственно в представления другого контроллера. Вместо этого у вас должен быть метод в контроллере табличного представления, который могут вызывать другие объекты. Это предотвратит превращение вашего кода в спагетти, в котором вы никогда не знаете, какой контроллер / объект меняет пользовательский интерфейс.

Причина, по которой self.parentViewController.tableView не работает, заключается в том, что он определен только как универсальный UIViewController, у которого нет свойства tableView. Как отмечалось выше, приведение к соответствующему классу избавит от сообщения.

Вы также можете использовать вызов [self.parentViewController tableview], который не приводит к ошибке, поскольку обрабатывает свойство как вызов метода.

0 голосов
/ 18 декабря 2009

Попробуйте это:

MyParentControllerClass       *parent = (MyParentControllerClass *) self.parentViewController;
[parent.tableView reloadData];
0 голосов
/ 18 декабря 2009

Попробуйте:

[((MyParentViewControllerClassName *)self.parentViewController).tableView beginUpdates];
[((MyParentViewControllerClassName *)self.parentViewController).tableView reloadData];
[((MyParentViewControllerClassName *)self.parentViewController).tableView endUpdates];

замена MyParentViewControllerClassName на имя класса вашего родительского vc.

Чтобы сослаться на родительский контроллер представления, мне всегда приходилось делать что-то вроде этого, например ::

NSArray *viewControllerArray = [self.navigationController viewControllers];
NSInteger parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

Вы также можете попробовать, следуя этому примеру:

[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] beginUpdates];
[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] reloadData];
[[[viewControllerArray objectAtIndex:parentViewControllerIndex] tableView] endUpdates];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...