2012-06-20 1 views
0

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

Мой заголовочный файл выглядит примерно так:.

@property (nonatomic) double time; 

Моя реализация идет что-то вроде этого:

@implementation MainVewController 

@synthesize time; 

- (void) viewDidLoad 
{ 
    startTime = NSDate.date; 
} 

- (double) returnTime { 
    NSLog (@"time is disappearing?? %f", time); 
    return time; 
} 

- (double) logTime { 
    NSLog (@"for some reason, this one is working and returns a value %f", time); 
    return time; 
} 

Мой другой класс просит мой двойник:

@synthesize mainViewController = _mainViewController ; 

- (MainViewController *)mainViewController { 
    if (!_mainViewController) _mainViewController = [[MainViewController alloc] init]; 
    return _mainViewController; 
} 

- (BOOL)getTime { 
    double timeGotten = [self.mainViewController returnTime]; 
    // why does this return 0? 
    return TRUE; 
} 

переменный времени постоянно обновляется в MainVewController:

time = [[NSDate date] timeIntervalSinceDate: startTime]; 
+0

Где указано переменная времени в отношении двух методов? –

+0

Как вы можете сказать, что этого не спрашивали в другом месте? FYI, вы НЕ ВЕРНУТЬ ДВОЙНУЮ .... и ваше двойное 'время' может не существовать. Установите точку останова. Сначала попробуйте проверить, существует ли файл self.mainViewController, затем проверьте значение времени и, пожалуйста, ВОЗВРАЩАЙТЕ его в случае необходимости 'timeGotten'. – Legolas

+0

Оба returnTime и logTime вернут то же значение для кода, который вы указали. Насколько мы можем видеть, вы никогда не устанавливаете значение времени. –

ответ

1

В первый раз, когда ваш «другой класс» запрашивает self.mainViewController, он создает новый. Я угадываю здесь, но, поскольку он называется MainViewController, вероятно, уже существует один из тех, что существуют, прежде чем «другой класс» создает свой собственный новый.

Это первый MainViewController, вероятно, где происходят обновления.

0

Вы состояние в объявлении функции, что функция возвращает переменную типа double, но вы никогда не ставили в ответном заявлении, возвращающее значение типа double ,

Надеюсь, это поможет!

0

Ваш код не говорит полную информацию. Я скопировал ваш код в новом приложении для какао. Есть несколько незначительных отличий, однако логика остается неизменной.

Мой AppDelegate.h выглядит следующим образом:

#import <Cocoa/Cocoa.h> 

@interface AppDelegate : NSObject <NSApplicationDelegate> 

@property (nonatomic) double time; 

@property (assign) IBOutlet NSWindow *window; 

@end 

AppDelegate.m выглядит следующим образом:

#import "AppDelegate.h" 

@implementation AppDelegate 

@synthesize window = _window; 

@synthesize time; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSDate * startTime = [NSDate date]; 
    time = [[NSDate date] timeIntervalSinceDate: startTime]; 

    NSLog(@"Return time %f",[self returnTime]); 
    NSLog(@"Log time %f", [self logTime]); 
} 

- (double) returnTime { 
    return time; 
} 

- (double) logTime { 
    return time; 
} 

@end 

Скопируйте этот код в новый проект какао и запустить приложение, и вы увидите, это работает правильно. На моей машине, выход консоли выглядит следующим образом:

2012-06-21 20:02:17.832 test[298:403] Return time 0.000003 
2012-06-21 20:02:17.833 test[298:403] Log time 0.000003 

Есть целый ряд вещей, которые могут быть не так с вашим кодом, но большинство из них просто спекуляции, не видя никакого дальнейшего кода. Во-первых, у вас может быть несколько экземпляров mainViewController, как упоминание от Phillip Mills (у вас может быть экземпляр в файле nib, а также, например, передача экземпляров файла файла nibs), что означает, что вы вызываете методы, которые проходят назад различные переменные времени.

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

Примечание: в вашем коде также была небольшая ошибка.Эта линия:

NSLog ("for some reason, this one is working and returns a value %f", time); 

должно быть (обратите внимание на знак @):

NSLog (@"for some reason, this one is working and returns a value %f", time); 

Я пошел вперед и редактировать свой пост, чтобы исправить это, как я не думаю, что это проблема, так как выиграл код даже не компилируйте на моей машине, если символ @ оммичен.

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