как передать переменную между двумя viewcontroller? - PullRequest
0 голосов
/ 13 февраля 2009

я хочу передать переменную из viewcontroller другому, как я это делаю в первом заголовочном файле viewcontroller я объявил переменную

1.h:

NSString * string;

и на втором контроллере вида я импортирую 1.h в моем файле 2.m, способ, которым я вызываю переменную,

2.Й:

NSString * string2 = 1.string

однако, если она выдаст ошибку, может кто-нибудь научить меня, как это сделать, потому что у меня нет сильных основ в объектно-ориентированном программировании, спасибо

Ответы [ 2 ]

1 голос
/ 13 февраля 2009

Недостаточно просто определить и объявить две строки. Это гарантирует, что у каждого класса есть переменная с именем string или string2, но когда ваша программа выполняется, это фактические объекты, которые должны ссылаться на конкретные экземпляры string1 (или string2).

Это похоже на проектирование дома с почтовым ящиком - почтовый ящик находится на плане дома, но ничего не происходит, пока конкретное письмо не будет отправлено в конкретный дом.

Что вам нужно сделать, это подключить фактические экземпляры вашего класса, возможно, с помощью метода init, например:

// 1.h

@interface ViewController1 : UIViewController
{
// declare our variable
NSString* string1;
}

// declare 'string1' as a property
@property (retain) NSString* string1;

// 1.m
// implements the property for string1
@synthesize string1;

// 2.h
@interface ViewController2 : UIViewController
{
// declare our variable
NSString* string2;
}

// declare 'string2' as a property
@property (retain) NSString* string2;

// 2.m

- (id)initWithTitle:(NSString*)aTitle andString1:aString
    {
if (self = [super init])
    {
        self.title = aTitle;
        self.string1 = aString;
    }

return self;
}

Затем в 1.m вы создаете второй контроллер и подключаете строки, как это:

// 1.m
mySecondController = [[ViewController2 alloc] initWithTitle:@"Controller 2" andString:string1];
0 голосов
/ 13 февраля 2009

Хотя есть прямой доступ к переменным-членам, подобным этой (с помощью оператора ->), это не рекомендуется.

Правильный способ - предоставить средство доступа для получения / установки переменных-членов.

В Objective-C 2.0 (iPhone и OSX 10.5) вы можете легко сделать это, используя ключевое слово "property". В качестве части синтаксиса свойства вы также можете выразить, как вы хотите, чтобы «набор» объектов обрабатывался.

сохранено - предыдущий объект будет освобожден, а новый сохранен копировать - объект будет скопирован назначить - объект будет назначен.

Это основы, я предлагаю вам прочитать больше о свойствах.

Ниже показано, как вы будете использовать свойства в вашем примере. Обратите внимание, что поскольку мы имеем дело с NSString, который является производным классом NSObject, мы используем опцию «retain», чтобы обеспечить правильное обновление счетчиков ссылок.

// 1.h

@interface ViewController1 : UIViewController
{
// declare our variable
NSString* _string;
}

// declare 'string' as a property
@property (retain) NSString* string;

// 1.m
// implements the property for string
@synthesize string = _string;

// constructor for ViewController1
-(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
  if (self = [super initWithNibName: name bundle: bundle]) {
    // Initialize the string here.
    self.string = @"Hello World";
  }
}

// 2.m
NSString* oldString = view.string;
view.string = @"New String";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...