Сбой предустановки времени получения фона 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
называется во время
applicationWillResignActive
applicationDidEnterBackground
applicationWillTerminate
applicationDidReceiveMemoryWarning
unarchiveObjectWithFile
вызывается при необходимости, если синглтон равен нулю.
Таким образом, вышли из системы и вытерли означает, что синглтон ноль иunarchiveObjectWithFile
не удается получить какие-либо данные.