- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用parse将数据存储在parse的本地数据存储中并将该数据备份到parse云的应用程序。通常,这很好。在本地和云中存储数据的关键代码如下:
- (void)store:(PFObject*) parseObject {
if (parseObject) {
[parseObject pinInBackground];
[parseObject saveEventually];
} else
NSLog(@"Err :Store was passed a nil?");
}
最佳答案
我在这里发布我自己的结果,也许它们对某人有用。回顾了Parse的源代码后,我对它的工作方式有所了解,我不能保证这是最终的词或整个故事,但它符合事实。
Parse现在是开源的,因此您至少可以去看看,如果有问题,请尝试确定正在发生的事情。
Parse in github
解析保留任务队列,严格按照请求的顺序对其进行处理。无论任务是在前台(阻止)还是在后台(有或没有回调)请求的,都是如此。同样,任务是查询,固定,保存等也没关系,它们都在任务列表中排队。任务列表保留在内存中,如果应用程序被挂起然后终止,或者在处理所有任务之前终止或终止,则任务丢失。
因此,如果parse没有执行任何操作,并且您请求固定或保存,它将启动此操作,并且很可能一切都很好。
如果解析很忙(按照我上面的描述),则saveEventually在队列的末尾等待处理。在处理此任务之前,您可能会遇到parse未记录saveEventually的风险。请注意,重要的是要理解,按过程我的意思是查看任务-不是完成任务-只是简单地查看任务是什么,并在saveEventually情况下进行记录。
我不一定认为这是一个错误。我的问题是我正在将saveEventually视为数据库提交。我知道这并不意味着它已经在云中了,我只是假定将saveEvent最终返回时以非 Volatile 方式存储将其推送到云中的请求。一旦完成处理,它就像是一次提交,它将最终存储到云中,但是您无法确定它是否已通过编程方式进行处理(saveEventually回调在完成时未记录saveEventually)。
如果应用程序是裸体应用程序,那么用户已经采取了一些措施,他们应该知道自己在做什么。但是,如果您声明您的应用程序具有后台任务,则可以确保如果用户按下Home键或移至另一个应用程序-我认为他们有权这样做,则仍有线程可以执行。我已经这样做了,似乎可以防止丢失数据。我基本上可以确保任务列表得到处理,并且即使应用程序进入后台,Parse也会注意到我所有的saveEventuallys。
iOS Background Execution
很难确定何时终止该线程。在我的应用程序中,我成对固定并最终保存。 Pin确实有回调,所以我保持出色的Pin数。当它达到零时,我等待一分钟,然后关闭线程。这给了1分钟时间来执行最终的save最终,这似乎在测试中绰绰有余。如果那时我可以访问互联网,则在稍后或下次运行该应用时会注意saveEventually。
我认为您必须是Parse的大量用户才能看到此问题。我有很多小的数据对象分布在不相关的不同表上。这将创建许多要备份的查询和固定,如果您可以一次性插入一个表或一个数据Blob,就不会看到我描述的问题。
根据注释请求的示例代码(7Jan16编辑)
下面是我用来实现上述目的的代码的核心。如果使用它,则需要对其进行更改。我建议也阅读上面的后台任务链接。后台线程使应用程序保持足够的 Activity 状态,以便解析仍可以处理其未完成的任务。
该代码块的目的是提供一个辅助函数,以跟踪所有待解析的未决请求。当它被调用时,它将启动一个后台线程(startPinMonitor)。仅启动一个监视器,这在startPinMonitor中进行了检查。我的代码在UI线程上运行,但是否则您可能需要一些同步逻辑。
- (void)store:(PFObject*) parseObject {
if (parseObject) {
if (self.outStandingPins == 0)
[self startPinMonitor];
self.outStandingPins++;
[parseObject pinInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
self.outStandingPins--;
if(!succeeded)
NSLog(@"Err : Pin failed?");
}];
[parseObject saveEventually];
}
}
-(void) startPinMonitor {
if (![self.myTimer isValid]) {
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:30
target:self
selector:@selector(checkPinStatus)
userInfo:nil
repeats:YES];
self.myBackgroundTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"Background tasks stopped");
}];
}
}
-(void) checkPinStatus {
NSLog(@"Current outStandingPins=%i", self.outStandingPins);
if (self.outStandingPins == 0) {
[self.myTimer invalidate];
[[UIApplication sharedApplication]
endBackgroundTask:self.myBackgroundTask];
}
}
关于ios - 解析保存最终在应用程序快速终止时最终失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32617917/
我在使用以下代码时遇到问题: function http_file_exists($url){ $f=fopen($url,"r"); if($f){ fclose($f); retu
我已经通过 Git 部署到 Azure 几个月了,没有出现重大问题,但现在我似乎遇到了一个无法克服的错误。 我创建了一个新的 Azure 网站,为正在开发的项目创建单独的预览链接。我在新站点上设置了
我已经通过flutter创建了一个App并完成了它,我想在flutter文档中阅读时进行部署。 我收到此错误: FAILURE: Build failed with an exception. * W
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
我正在尝试使用 RapidJSON 解析从服务器接收到的数据。以下是收到的确切字符串: [ { "Node": "9478149a08f9", "Address": "172.17
我尝试为 ios 编译 OpenCV。我总是收到这些错误。我用不同版本的opencv试了一下,结果都是一样的。 我运行这个:python 平台/ios/build_framework.py ios_o
我在一台机器上做基本的发布/订阅,我的客户端是 StackExchange-Redis 的 C# 客户端,我在同一台机器上运行基于 Windows 的 Redis 服务器(服务器版本 2.8.4) 当
我有这段代码,但无法执行,请帮我解决这个问题 连接 connect_error) { die ("connection failed: " . $terhubung->connect_erro
我在 tomcat 上运行并由 maven 编译的 Web 应用程序给出了以下警告和错误。我可以在本地存储库中看到所有 JAR,但有人可以帮忙吗。 WARNING: Failed to scan JA
我正在 Windows 8 上使用 Android Studio 开发一个 android 应用程序,我正在使用一些 native 代码。突然间我无法编译我的 C 文件。当我运行 ndk-build
下面的代码对类和结构的成员进行序列化和反序列化。序列化工作正常,但我在尝试使用 oarch >> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误; 代码中是
如果我运行此命令“rspec ./spec/requests/api/v1/password_reset_request_spec.rb”,此文件中的所有测试都会通过。 但是,当我运行“rspec”时
我在尝试执行测试以使用 Protractor 上传文件时出错,我的代码是这个 it('it should be possible to upload a file', function() {
System.loadLibrary("nativefaceswap"); 当我运行我的应用程序时,我在 Android Studio 中发现了此类错误。在logcat中显示: java.lang.U
我希望有人能帮助我!使用任何方法或命令行的任何 SSL/HTTPS 调用均无效。 我在 Windows 10 中使用 Ubuntu Server 18.04 作为子系统。我的问题是昨天才开始出现的,因
通过删除这两个值将日期字段从 null=True 和 Blank=True 更改为 required 时,使用 db.alter 命令时遇到问题。 当以下行被注释掉时,迁移运行不会出现问题。
我第一次使用 Heroku 尝试创建应用程序(使用 SendGrid 的 Inbound Parse Webhook"和 Twilio SMS 通过电子邮件发送和接收 SMS 消息)。通过 Virtu
我正在将我的 swift 项目更新到 Xcode 7 上的 Swift 2.0。xcode 在构建项目时报告了以下错误: 命令/Applications/Xcode.app/Contents/Deve
在我的代码中,SSL 库函数 SSL_library_init() 没有按预期返回 1。我如何才能看到它返回了什么错误? 我在 SSL_library_init() 之后调用了 SSL_load_er
我正在尝试运行在以下链接中找到的答案: Asynchronously Load the Contents of a Div 但是当我这样做时,我会遇到我不太理解的错误。 我的代码: $(documen
我是一名优秀的程序员,十分优秀!