ios - Parse.com iOS localDatastore 仅固定,启用后不查找对象。 (也无法取消固定,因为它也找不到对象)

标签 ios parse-platform

我更新到最新的解析 SDK 1.6.2 以利用 localDatastore。不幸的是,我无法检索固定对象。最简单的实现:

- (void)queryForPinning{
if ([PFUser currentUser] != nil){
    PFQuery *query = [PFQuery queryWithClassName:@"GolfScores"];
    [query whereKey:@"golferId" equalTo:[[PFUser currentUser] objectId]];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
        if (!error){
            [PFObject pinAllInBackground:objects block:^(BOOL succeeded, NSError *error){
                if (succeeded){
                    NSLog(@"count %lu", (long unsigned)objects.count);
                }
            }];
        }
        else{
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];
}}

- (void)queryLocalData{
if ([PFUser currentUser] != nil)
{
    PFQuery *localQuery = [PFQuery queryWithClassName:@"GolfScores"];
    [localQuery whereKey:@"golferId" equalTo:[[PFUser currentUser] objectId]];
    [localQuery fromLocalDatastore];
    [localQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
    {
        if (!error)
        {
            NSLog(@"hopefully found this many objects %lu", (unsigned long)objects.count);
        }
        else
        {
            NSLog(@"something went wrong");
        }
    }];
}}

第一个固定查询被调用并完成。它记录到 block 中的控制台,如果我添加代码来更新表格 View ,它就会成功。我已经确认它实际上是固定对象,如本文末尾的编辑所示。从 localDatastore 请求的第二个查询记录了查询找到的 0 个对象。

当我从网络进行这些查询时,它可以正常工作。

据我了解,让 localDatastore 工作的步骤是:在 appDelegate 中启用它,固定对象,使用 [query fromLocalDatastore] 查询对象,以便查询知道在本地查找。如果我错过了一步,请告知。

如果我使用 iOS 文档中的 BFTask 替代语法,我会提到,因此我得到“BFTask is a Forward Declaration”错误:
[[localQuery getObjectInBackgroundWithId:@"xWMyZ4YE"] continueWithBlock:^id(BFTask *task{
  if (task.error) {
// Something went wrong.
return task;
  }
  // task.result will be your game score
  return task;
}];

我已经看到堆栈溢出时回答的 BFTask/Forward Declaration 问题,答案是包含 CoreData。我有 CoreData 框架,并且我尝试过明确地包含 CoreData/CoreData.h (但这没有用,所以我删除了明确的包含行,并且无论如何我都没有使用 BFTask)。我只是提供这个作为线索,如果答案不明显,可能表明我做错了什么。如果这不是线索而是分心,请忽略。

对于文档本身似乎回答的琐碎问题,我深表歉意。请忽略任何琐碎的语法错误,因为我无法让文本框识别我的嵌套样式。

我测试固定对象的方法是运行 iOS 设备并读取控制台日志。固定对象的查询由拉动刷新调用。在 viewWillAppear 上调用本地查询。我将运行第一个查询,在控制台中成功登录,然后停止并再次运行应用程序并转到 View 以触发本地查询,这将导致计数为 0。连接到 xCode 并在设备本身上运行它。同样,没有结果(如果有结果,我会更新 tableview,因为我无法以这种方式读取控制台日志 - tableview 将从网络更新,而不是从本地查询更新)。

谢谢阅读。

编辑:我已通过下载应用程序容器、将 .xcappdata 扩展名更改为 .xml 并导航到 AppData>Library>Private Documents>Parse>ParseOfflineStore 来确认我的对象已被固定。因此,它应该只是查询对象的问题。 (注意:请注意不要将任何内容保存到商店中,以免黑客更容易获取有害数据)

双重编辑:使用上面编辑中的信息,我还可以确认 unpin 不起作用。

最佳答案

您的查询代码看起来是正确的,所以我认为这是查询开始时的问题。确保仅在第一个查询完成将对象固定到 LDS 后才启动第二个查询。

我还建议您开始命名您的引脚,并在第一个查询中取消固定所有以前的数据,然后再固定新数据(something like this)。

关于ios - Parse.com iOS localDatastore 仅固定,启用后不查找对象。 (也无法取消固定,因为它也找不到对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568493/

相关文章:

javascript - docker 容器上解析服务器的自定义身份验证 (OAuth2)

android - 棘手的解析查询

ios - 解析和 Swift : Push notifications with "aps": {"content-available": 1} not being received by didReceiveRemoteNotification

iphone - iOS 5 : Image Filters

iphone - 使文本输入在文本字段中的某个空格后开始

ios - 大于 Unsigned Long Long

ios - 缺少私钥

ios - 解析iOS初学者: getting an exception on PFUser signup

android - 显示图像的名称( Kotlin )

ios - 如何在 Apple Vision 框架中拍摄检测到的矩形的照片