这对我来说似乎是一个简单的问题,但我无法在任何地方找到答案。
我有一个视图控制器,它异步下载数据,然后在按下按钮时保存它。
我可以确定异步请求将完成(ViewController 是委托)并且即使 ViewController 已弹出,数据也会被保存?否则我会检查下载是否已经完成,如果没有,我会启动一个后台线程来下载数据。
谢谢你的帮助!
这对我来说似乎是一个简单的问题,但我无法在任何地方找到答案。
我有一个视图控制器,它异步下载数据,然后在按下按钮时保存它。
我可以确定异步请求将完成(ViewController 是委托)并且即使 ViewController 已弹出,数据也会被保存?否则我会检查下载是否已经完成,如果没有,我会启动一个后台线程来下载数据。
谢谢你的帮助!
我希望你将异步请求与 uiviewcontroller 分开。
否则请确保 UI 上的每个操作都将在主线程上触发。
dispatch_async(dispatch_get_main_queue(), ^{
//implement your code on UI
});
如果 uiviewcontroller 已连接委托并且控制器仍然存在(不是 nil),那么即使 uiview 控制器尚未出现,来自委托的方法也会运行。
干杯
您应该在模型类而不是控制器 (MVC) 中完成所有数据下载。
创建一个单例 NSObject,其中包含从 Web 下载的所有逻辑,并将其存储在单例中。这样,您的应用程序中的任何类都可以访问该数据,并且您不必担心当您从导航堆栈中弹出视图控制器时,它会被释放。
单例示例:
+ (YourObject *)object
{
static YourObject *_object = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_object = [[self alloc] init];
});
return _object;
}