小编pyr*_*cam的帖子

当应用程序快速终止时解析保存最终失败

我有一个应用程序,它使用 parse 将数据存储在 parse 的本地数据存储中,并将所述数据备份到解析云。一般来说,这种方法效果很好。在本地和云端存储数据的关键代码如下:

- (void)store:(PFObject*) parseObject {
    if (parseObject) {
        [parseObject pinInBackground];
        [parseObject saveEventually];
    } else
        NSLog(@"Err :Store was passed a nil?");
}
Run Code Online (Sandbox Code Playgroud)

我有一个应用程序,一些用户表示,如果他们设置数据然后“不久”终止该应用程序,则会丢失数据。

当用户数据更新时,该函数会快速连续传递大约 10 个或更多项目来存储。

我通过执行以下操作测试了这种情况。我让所有项目都被存储,并设置一个断点,以便在完成后命中。然后,我让应用程序再次运行,并通过按主页键并滑开应用程序来终止它。它还有大约一秒左右的运行时间,但关键点是无论如何,每个对象的存储都已完成。

我确实发现数据可能会丢失。看来,仅仅因为这些方法已运行并不能保证数据将被存储。需要明确的是,我知道这些函数不存储数据,但我曾认为(假设)在完成后可以保证存储数据的意图。

我想添加以下内容:

  1. 后期数据更容易丢失。也就是说,解析似乎按顺序处理数据。
  2. 您可以发现数据已固定在本地数据存储中,但无法对其进行解析(几乎就像固定有效,但最终保存没有)。
  3. 较旧(较慢?)的设备比新设备更容易受到影响。事实上,我很难在新的 iPad mini 上实现这一点,但可以在 iPhone 4 上实现。
  4. 需要启用网络,但如果您模拟不良网络(使用设备上的 iOS 设置),则更容易实现这一点。
  5. 数据量很小(100 字节),我没有达到解析保存限制。
  6. 我使用的是 Parse 版本 1.8.4。

我的问题如下:

我预计一旦这些电话返回,任务就会被锁定并且始终会完成。我知道无法保证 saveeventually 可能需要多长时间,但即使在下次运行应用程序时,它也始终会“最终”完成。我做错了什么吗?我是否面临这种数据丢失的风险并需要采取进一步的预防措施?有人有什么经验或建议吗?即使只是您发现它对您有用?可能我在其他地方做了一些愚蠢的事情,但很难看出是怎么做的。

谢谢你的时间。

ios parse-platform

3
推荐指数
1
解决办法
465
查看次数

解析本地数据存储性能

我使用解析作为云存储,结合本地数据存储进行一般访问.我发现查询本地数据存储需要的时间比我预期的要长很多.使用数据填充表或更新图形视图时,这一点尤其明显.coredata中的等效函数几乎是瞬时的,结果非常好.虽然我不期望coredata的性能,但它比我预期的离线访问慢得多,我想知道我做错了什么?

这是一个示例查询:

PFQuery *query = [PFQuery queryWithClassName:LOCATION_OBJECT];
[query fromLocalDatastore];
[query whereKey:MESSAGE_TO_FIELD equalTo:user.username];
[query orderByDescending:CREATED_FIELD];
NSLog(@"Query started");
NSArray* res = [query findObjects];
NSLog(@"Query finished, found %lu objects", (unsigned long)[res count]);
Run Code Online (Sandbox Code Playgroud)

在2015 iPad mini上执行我看到的时间如下:

2015-06-16 18:56:38.883 app[1744:1668474] Query started
2015-06-16 18:56:38.885 app[1744:1668474] Warning: A long-running operation is being executed on the main thread. 
Break on warnBlockingOperationOnMainThread() to debug.
2015-06-16 18:56:39.177 app[1744:1668474] Query finished, found 17 objects
Run Code Online (Sandbox Code Playgroud)

我确实理解Parse提供的不仅仅是一个数据库,不过这个查询需要0.292秒,这似乎是一个时代.对于我的应用程序,当用户在屏幕上导航时,我会经常使用这种操作.使用coredata,结果非常好,Parse的延迟非常明显.值得一提的是,模拟器上的结果相似.当你做这类事情时警告解析问题并不令人鼓舞,但无论如何,我的问题有两个:

1)我是否错过了Parse中的任何性能调整/设置?2)是否有其他使用过Parse的人发现了类似的表现或有任何建议?

在这一点上,看起来我需要在应用程序中使用coredata并编写我自己的例程来将数据推送到Parse的云,这比我希望的要多得多.

谢谢你的时间.

更新30Jun15

感谢您的评论,根据这些评论,以下是Parse希望您这样做的示例表现.和以前一样,与coredata相比,性能仍然很差.示例代码:

PFQuery *query = [PFQuery queryWithClassName:LOCATION_OBJECT];
[query fromLocalDatastore];
[query whereKey:MESSAGE_TO_FIELD equalTo:user.username]; …
Run Code Online (Sandbox Code Playgroud)

ios parse-platform

0
推荐指数
1
解决办法
662
查看次数

标签 统计

ios ×2

parse-platform ×2