Передача данных между контроллерами представления - PullRequest
1304 голосов
/ 06 марта 2011

Я новичок в iOS и Objective-C и во всей парадигме MVC, и я застрял в следующем:

У меня есть представление, которое действует как форма ввода данных, и я хочу дать пользователю возможность выбрать несколько продуктов. Продукты перечислены в другом представлении с UITableViewController, и я включил несколько вариантов выбора.

У меня вопрос, как мне перенести данные из одного представления в другое? Я буду удерживать выборки на UITableView в массиве, но как мне затем передать это обратно в предыдущее представление формы ввода данных, чтобы его можно было сохранить вместе с другими данными в Core Data при отправке формы?

Я просмотрел и увидел, как некоторые люди объявляют массив в делегате приложения. Я читаю что-то о Singletons, но не понимаю, что это такое, и я читаю что-то о создании модели данных.

Каков будет правильный способ выполнения этого и как я буду это делать?

Ответы [ 42 ]

0 голосов
/ 17 июля 2013

Используйте центр уведомлений для передачи данных из одного представления в другое. Шаблон слушателя-наблюдателя работает лучше всего. Другим обходным путем может быть создание одинаковых объектов в обоих классах, Создайте объект класса 2 в классе один, получите доступ к передаваемым объектам данных и установите их, а затем нажмите контроллер представления.

0 голосов
/ 07 июля 2016

Более простой способ здесь.

Просто используйте глобальную переменную. Объявите объект или переменную, необходимые для перехода к следующему классу.

Например, у нас есть 2 класса - classA и classB соответственно.

В classA обычно содержится:

#import "classA.h"

@interface classA()

@end

@implementation classA

-(void)viewDidLoad
{
    ...
}
-(void)didReceiveMemoryWarning
{
    ...
}

и classB содержит:

#import "classB.h"

@interface classB()

@end

@implementation classB

-(void)viewWillLoad
{
    ...
}
-(void)didReceiveMemoryWarning
{
    ...
}

Теперь импортируйте второй класс classB в classA

#import "classA.h"
#import "classB.h"  //---import classB to classA.
@interface classA()

@end

@implementation classA

-(void)viewDidLoad
{
    ...
}
-(void)didReceiveMemoryWarning
{
    ...
}

Теперь у нас есть мост, чтобы пойти во второй класс classB теперь, чтобы объявить переменную или объект как глобальный, объявите его в файле .m первого класса, как показано ниже

В classA.h

#import "classA.h"
#import "classB.h"
@interface classA()

@end
NSString *temp;  //----declare any object/variable as global.
@implementation classA

-(void)viewDidLoad
{
    ...
    temp=@"Hello";
    ...
}
-(void)didReceiveMemoryWarning
{
    ...
}

Здесь объект temp является глобальным объектом класса NSString для доступа к глобальному объекту или переменной в любом классе, просто повторно объявите объект или переменную во втором классе. Например. приведено ниже:

В classB.m

#import "classB.h"

@interface classB()

@end
extern NSString *temp;  //----use `extern` keyword for using the global object/variable in classB that was declared in classA.
@implementation classB

-(void)viewDidLoad
{
    ...
    LabeL.text=temp;
    ...
}
-(void)didReceiveMemoryWarning
{
    ...
}

Теперь к значению может обращаться второй класс. Просто! .. Этот метод можно использовать для любого количества классов.

Примечание:

Вы должны импортировать .h файл второго класса в первый класс. Но не нужно импортировать файл .h первого класса во второй класс.

Запомните мост, если мост есть, он может идти с обеих сторон.

Я думаю, это поможет. Это помогло мне, когда я был в такой же ситуации.

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