Передача данных из контроллера popped view - PullRequest
3 голосов
/ 27 июля 2011

У меня есть два контроллера представления.Я первый, и когда я нажимаю кнопку, второй контроллер вида помещается в стек контроллера навигации.Здесь во втором контроллере представления у меня есть табличное представление, и когда я нажимаю на некоторые строки, они выбираются (например, флажки), и некоторые данные, связанные с этими строками, добавляются в массив.Теперь, когда я закончил с выбором, я хочу вернуться к первому контроллеру представления и использовать этот массив.Как это сделать?Теперь мое приложение работает так: у меня есть протокол делегирования, затем объект, в котором у меня есть массив свойств, и я могу получить доступ к этому объекту и его массиву из всего приложения ... но мне это не очень нравится.Это правильный / лучший / самый простой способ сделать это?

Ответы [ 2 ]

6 голосов
/ 27 июля 2011

У меня есть протокол делегирования, затем объект, в котором у меня есть массив свойств, и я могу получить доступ к этому объекту и его массиву из целого приложения ... но мне это не очень нравится.Это правильный / лучший / самый простой способ сделать это?

Делегирование - это правильный шаблон для использования здесь, но вы описываете не столько делегирование, сколько использование глобальной переменной.Возможно, вы храните глобальные переменные в вашем делегате приложения - обычно это то, чего вы можете избежать, если можете.

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

SecondViewController.h:

@protocol SecondViewControllerDelegate;

@interface SecondViewController;

SecondViewController : UIViewController
{
    id<SecondViewControllerDelegate> delegate;

    NSArray* someArray;
}

@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate;
@property (nonatomic, retain) NSArray* someArray;

@end

@protocol SecondViewControllerDelegate
- (void)secondViewControllerDidFinish:(SecondViewController*)secondViewController;
@end

SecondViewController.m:

@implementation SecondViewController

@synthesize delegate;
@synthesize someArray;

- (void)dealloc
{
    [someArray release];
    [super dealloc];
}

- (void)someMethodCalledWhenUserIsDone
{
    [delegate secondViewControllerDidFinish:self];
}

FirstViewController.h:

#import SecondViewController

@interface FirstViewController : UIViewController <SecondViewControllerDelegate>
{
    ...
}

@end

FirstViewController.m:

@implementation FirstViewController

- (void)secondViewControllerDidFinish:(SecondViewController*)secondViewController
{
    NSArray* someArray = secondViewController.someArray
    // Do something with the array
}

@end
0 голосов
/ 27 июля 2011

Вам нужно reference свой secondViewController и создать для него объект.

secondViewController *object2 = [[SecondViewController alloc] init];

object2.thatArray будет содержать содержимое массива. Убедитесь, что массив сохраняет свои значения при выходе из этого контроллера представления (или вы можете создать этот массив в вашем AppDelegate, чтобы к нему могли обращаться все viewControllers).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...