2010-08-25 5 views
0

Вот простой для вас, ребята. Я определяю класс для хранения переменных, поэтому я могу повторно использовать эти переменные в разных ViewControllers.Обмен переменными среди 2 ViewControllers

Вот как я это делаю, `s, очевидно, не работает (вот почему я спрашиваю вопрос ...):

я объявляю класс:

VariableStore.h

@interface VariableStore : NSObject { 

    int evTe; 

} 

@property (nonatomic) int evTe; 

+ (VariableStore *)shareInstance; 

@end 

VariableStore.m

@implementation VariableStore 
@synthesize evTe; 

+ (VariableStore *)sharedInstance { 

    static VariableStore *myInstance = nil; 
    return myInstance; 

} 
@end 

Теперь в моем FirstViewController я хочу, чтобы установить значение для evTe:

[[VariableStore sharedInstance] setEvte:2]; 
NSLog(@"value testing, %i", evTe); 

И это держит на возвращение 0, к сожалению, я m obviously missing something important here but I can't figure out what it is . Later on I хотел бы установить значение для evTe здесь в FirstViewController, а затем использовать его обратно в SecondViewController ..

+0

может у показать код setEvte: функции. –

+0

Сурия: он использует синтезированные геттеры и сеттеры, нет кода для отображения ... – Toastor

+0

Julz: У вас тоже есть опечатка: в объявлении интерфейса ваш метод называется shareInstance (отсутствует «d»), в то время как он sharedInstance в реализации. Если у вас есть это и в вашем проекте, это должно вызвать ошибку или хотя бы предупреждение ... – Toastor

ответ

0

Во-первых, вы должны объявить статическую переменную вне функции, оба контроллера могут получить доступ.

static VariableStore* myInstance = nil; 

Одноэлементный sharedInstance должно быть:

if(myInstance == nil) 
{ 
    myInstance = [[VariableStore] alloc] init]; 
} 
return myInstance; 
+0

Сделал трюк, спасибо! –

4

Вы устанавливаете свой общий экземпляр к нулю, а затем вернуть его:

static VariableStore *myInstance = nil; 
return myInstance; 

нильпотока экземпляр не будет держать вашу переменную. Это ноль.

Прежде всего, вы не должны использовать синглтон для передачи переменных. Если вы собираетесь это сделать, тогда вы можете просто использовать глобальные переменные (не делайте этого ни путем, ни способом). Во-вторых, если вы настаиваете на использовании синглета, вам нужно read up on how to use them.

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

+0

Hey Matt, Спасибо за совет , очевидно, я бы предпочел напрямую обращаться к первому контроллеру представления из SecondViewController, но я не знаю, с чего начать, что бы я ни посмотрел, в частности? Thanks –

1

Я думаю, что в nslog вы должны выводить не только evTe, но [[VariableStore sharedInstance] evTe].

2

Ну, вы просите значение evTe без вызова объекта, к которому он принадлежит. Попробуйте это:

NSLog(@"value testing, %i", [[VariableStore sharedInstance] evTe]); 

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

VariableStore *vStore = [VariableStore sharedInstance]; 

так что вы можете сделать:

[vStore setEvTe:2]; 
NSLog(@"value testing, %i", [vStore evTe]); 

И смотреть за то, что Мэтт сказал о том, чтобы заманить ваш синглтон;)

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