Функция тайм-аута iOS не работает должным образом - PullRequest
1 голос
/ 03 декабря 2011

Я добавил этот код, который работает в моем приложении как автоматический тайм-аут.userDefaults doubleForKey:@"timeoutLength" должно быть в минутах.Например, если значение равно 500, это должно означать 500 минут.

Кажется, я продолжаю работать с циклом тайм-аута, хотя даже на самом деле это не было 500 + мин.Что-то не так в моем коде?Возможно ошибка минут / секунд и т. Д.

    [userDefaults setDouble:[[userContextDictionary valueForKey:@"autologout_idle_timeout"] doubleValue] forKey:@"timeoutLength"];


    double timeDifference = ([[NSDate date] timeIntervalSince1970] - [userDefaults doubleForKey:@"Close Time"]) / 60;

    if (timeDifference > [userDefaults doubleForKey:@"timeoutLength"]) {
        NSLog(@"Timeout Hit");
    } else {
        NSLog(@"No Timeout");
    }

Редактировать:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [userDefaults setObject:[NSDate date]  forKey:@"Close Time"];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
    [userDefaults setDouble:[[userContextDictionary valueForKey:@"autologout_idle_timeout"] doubleValue] forKey:@"timeoutLength"];  
    //This is an int like 500, or 600, etc. 

    NSDate *closeDate = [userDefaults objectForKey:@"Close Time"]
    NSTimeInterval timeWhenClosedTimeInterval = [closeDate timeIntervalSince1970];
    NSTimeInterval todayTimeInterval = [[NSDate date] timeIntervalSince1970];

    NSTimeInterval timeDifference = ((todayTimeInterval - timeWhenClosedTimeInterval ) / 60);
    if (timeDifference > [userDefaults doubleForKey:@"timeoutLength"]) {
        NSLog(@"Timeout Hit");
    } else {
        NSLog(@"No Timeout");
    }
    return YES;
}

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

NSTimeInterval выражается в секундах , а не минутах.

Вот документ Apple, где он описан .

Я не уверен на 100%, в чем ваша конечная проблема, но 500 секунд не кажутся достаточным временем.

Тем временем я записал некоторые изменения в ваш код для демонстрации для себя:

NSDate * yesterday = [[NSDate date] dateByAddingTimeInterval: (-1 * 60 * 60 * 24 )];
NSTimeInterval yesterdayTimeInterval = [yesterday timeIntervalSince1970];
NSTimeInterval todayTimeInterval = [[NSDate date] timeIntervalSince1970];

// this properly converts timeDifference in seconds to minutes
NSTimeInterval timeDifference = ((todayTimeInterval - yesterdayTimeInterval ) / 60);
NSLog( @"time difference is %4.2f", timeDifference );

, что составило 1400 минут (деленное на 60 минут в час = 24 часа).

1 голос
/ 03 декабря 2011

Я предполагаю, что есть некоторая ошибка с установкой значений NSUserDefaults или ошибка с вашим расчетом timeDifference.Добавьте эту строку и убедитесь, что вы на самом деле устанавливаете длительность тайм-аута 500:

NSLog(@"Timeout length: %f, close time: %f, time difference: %f", [userDefaults doubleForKey:@"timeoutLength"], [userDefaults doubleForKey:@"Close Time"], timeDifference);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...