3

У меня есть приложение с TabBar, под основной вкладкой есть навигационные контроллеры, под ними есть «ветви» из tableviewcontollers.Обмен данными между un-related (table) viewcontrollers?

Как я могу сделать два несвязанных, не связанных друг с другом, под двумя разными значками вставки значков управления обменом информацией между ними?

Пробовал с делегированием, но я не могу получить переменную экземпляра в доверителя от delegatee (нет никакой связи между ними, не segue.destinationviewcontroller и т.д.)

какие-либо идеи?

Практическое приложение: приложение показывает список подэлементов (родительское табличное представление имеет элементы), а на другой вкладке добавляются последние элементы, которые были выбраны, (но maxiumum 10 и отсортированы по последнему слову) .. нарушали мои * * на нем ...

благодаря

ответ

1

Рассматривали ли вы размещая NSNotification, передавая данные, которые вы хотите передать в userInfo?

Из Apple documentation:

Объект отправки (или проводки) уведомление не должны знать , что эти наблюдатели. Таким образом, уведомление является мощным механизмом для достижения координации и сплоченности в программе. Это уменьшает потребность в сильных зависимостях между объектами в программе (такие зависимости уменьшают возможность повторного использования этих объектов).

Класс отправки уведомления делает это следующим образом:

[[NSNotificationCenter defaultCenter] postNotificationName: <notification-name> 
                object: self 
                userInfo: <your-user-info>]; 

и класс прослушивающему регистров уведомления для уведомлений с помощью:

[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(someMethod:) 
              name: <notification-name> 
              object: nil]; 

и имеет метод:

- (void) someMethod: (NSNotification *) notification 
{ 
    NSDictionary * myInfo = notification.userInfo; 

    //do something with myInfo 
} 
+0

Нет, можете ли вы описать процесс? Каков правильный способ сделать это с помощью NSNotification? – mindbomb

+0

Отвечено обновлено. –

+0

, но могу ли я передать объект, такой как NSDictionary, как данные с помощью этого метода? – mindbomb

1

Вы можете использовать @propert y и @synthesize, чтобы создать получатели и сеттеры по умолчанию. Вы можете создать свои собственные геттеры и сеттеры вручную.

+0

Я знаю это. не может понять, как это помогает. – mindbomb

2

Я нахожу NSNotification s не лучший способ сделать это, поскольку вы выполняете пару несвязанных TableViewControllers. Я думаю, что поток информации в приложении имеет решающее значение.

Решение, которое я лично хотел бы получить, - это центральный класс, который управляет глобальными данными для вашего приложения. Это может быть класс AppDelegate или произвольный менеджер, который управляет потоком данных и «тянет строки» и посредничает между различными независимыми ViewControllers.

Пример:
Используя этот код вы можете разжиться ваш UITabBarController и установить свой класс в качестве делегата от ваших ViewControllers и т.д.:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UITabBarController *rootTabBarController = (UITabBarController *)self.window.rootViewController; 

    MyFirstTableViewController *firstVC = [rootTabBarController.viewControllers objectAtIndex:0]; 
    firstVC.delegate = self; // Get informed about events in the first ViewController 

    MySecondTableViewController *secondVC = [rootTabBarController.viewControllers lastObject]; // Assuming you only have two Tabs 

    // Once you have the rootTabBarController you can cast it to the corresponding ViewController and access any nested UIViewControllers 

    return YES; 
} 

#pragma mark - MyFirstTableViewControllerDelegate 
-(void)firstTableViewController:(MyFirstTableViewController *)sender didSomethingFancy:(MyFancyObject *)fancy{ 
    // Do stuff like fetching some data, based on the event from the first ViewController 
    // Maybe tell the secondVC to refresh its data etc. etc. 
} 
+0

Отлично, только проблема заключается в том, что один из контроллеров view, нуждающихся в обмене данными, не находится на одном из корневых контроллеров ViewBar, но «похоронен» дальше по навигационному контроллеру (под TabBar). Также, где было бы лучшее место/функция, чтобы «зарегистрировать» делегат = self в этом другом диспетчере представлений? – mindbomb

+1

это прояснит ситуацию: [un-related viewcontrollers storyboard] (http://imgbin.org/index.php?page=image&id=6254) пытается подключить фотографии «топ-мест» к «недавним фотографиям» – mindbomb

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