Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS keepAlive回调实例变量_Objective C_Background_Callback - Fatal编程技术网

Objective c iOS keepAlive回调实例变量

Objective c iOS keepAlive回调实例变量,objective-c,background,callback,Objective C,Background,Callback,当系统调用我的处理程序时,我似乎丢失了一些指向实例变量的指针 在我的.m实现中,我有 @implementation BackgroundWorker MyApplication* myApp; NSDate* lastUpdate; 在我的处理程序中,该变量不再有效: [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ // myApp is valid however // Check t

当系统调用我的处理程序时,我似乎丢失了一些指向实例变量的指针

在我的.m实现中,我有

@implementation BackgroundWorker

MyApplication* myApp;
NSDate* lastUpdate;
在我的处理程序中,该变量不再有效:

[[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{

  // myApp is valid however

  // Check that enough time has passed
  NSDate* now = [NSDate date];

  if (lastUpdate == nil ||         // <--- lastUpdate not a valid object
    [now timeIntervalSinceDate:lastUpdate] >= TIME_RESOLUTION_SEC) {

    // do stuff

    lastUpdate = now;
  }

}];
[[UIApplication sharedApplication]setKeepAliveTimeout:600处理程序:^{
//然而,myApp是有效的
//检查是否经过了足够的时间
NSDate*现在=[NSDate日期];
如果(lastUpdate==nil | |/=时间|分辨率|秒){
//做事
lastUpdate=now;
}
}];
我在class方法中正确初始化了lastUpdate,并且在应用程序第一次运行时它是有效的,但是如果它转到后台并且调用了处理程序,则变量不再有效


有没有办法告诉操作系统不要在后台回调之间销毁/清除实例变量?

将该值存储在app delegate中,但我很可能会将其存储在NSUserdefaults中,并在每次需要时提取该值。如果用户终止应用程序,这也将保留该值。

在另一个线程上找到解决方案:

它与属性和支持变量等有关


我必须将NSDate分配给属性,而不是支持变量…

谢谢,这就是我现在要做的,但我想知道是否有办法避免NSUserdefaults中的IO和来自NSUserdefaults的IO。当实例被刷新时是否可以“检测”到?您是否尝试通过属性访问变量?您是说在后台调用处理程序(块)?或者你是说它从后台返回并调用处理程序(块),但它没有正确执行。嗨,Benny,处理程序块是由操作系统在后台调用的,尽管我可以访问局部变量的一些实例,但其他实例现在无效(地址范围错误)。如果我知道iOS杀死或刷新了我的应用程序,但是文档说它没有通知就这样做了,然后我想知道为什么在NSDate变量指针无效的情况下,一些指针是有效的。这很可能是因为您的lastUpdate变量被静态复制到块中,这意味着它在内存中有一个特定的位置。我猜在某一点上,特定的点会被抹去。我想我会回到我最初的建议,让你的应用程序中的变量成为委托。然后设置并从那里获得它。