Сбой предустановки времени получения фона iOS

Я настроил фоновую выборку, используя контур изNSScreencast эпизод № 92.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
  ...
  [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
  ...
}

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{
    if ([[MyAppAPIClient manager] reachable] && [[Session manager] userSignedIn])
    {
        [[[Session manager] user] fetchBackgroundWithSuccess:^(NSURLSessionDataTask *task, NSDictionary *responseObject) {
            completionHandler(UIBackgroundFetchResultNewData);
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
            completionHandler(UIBackgroundFetchResultFailed);
        }];
    }
    else
        completionHandler(UIBackgroundFetchResultNoData);
}

ДляfetchBackgroundWithSuccess:failure метод, я использую AFNetworkingNSURLSessionDataTask.

К сожалению, иногда я получаю ошибку

MyApp[3344] has active assertions beyond permitted time:
{(
    <BKProcessAssertion: 0x178279c00> identifier: Background Content Fetching (1596) process: MyApp[3344] permittedBackgroundDuration: 30.000000 reason: backgroundContentFetching owner pid:16 preventSuspend      preventThrottleDownUI  preventIdleSleep  preventSuspendOnSleep 
)}

и это полностью вылетает из моего приложения, выходит из системы моего пользователя, и все данные пользователя стираются.

Не уверен, как это исправить, но любое направление будет высоко ценится.

ОБНОВИТЬ:

Я храню данные, используя NSKeyedArchiver'sarchiveRootObject:toFile а такжеunarchiveObjectWithFile, Он отслеживает, вошел ли пользователь, его user_id и другую важную информацию. Все это кэшируется в памяти с помощью одноэлементного объекта классаUser.

archiveRootObject:toFile называется во время

applicationWillResignActiveapplicationDidEnterBackgroundapplicationWillTerminateapplicationDidReceiveMemoryWarning

unarchiveObjectWithFile вызывается при необходимости, если синглтон равен нулю.

Таким образом, вышли из системы и вытерли означает, что синглтон ноль иunarchiveObjectWithFile не удается получить какие-либо данные.

Ответы на вопрос(2)

Ваш ответ на вопрос