Parse.com iOS objectWithoutDataWithObjectId和Local Datastore

时间:2016-01-28 07:24:12

标签: ios parse-platform local-datastore

背景信息:我希望我的游戏应用程序完全脱机工作,因此用户无需连接互联网即可开始播放(某些功能将在没有连接的情况下被禁用)。为此,我从parse.com导出了一个PFObject子类静态数据,我希望将其包含在我的应用程序包中,这样用户就不需要从parse.com下载它了。

说我的静态数据的PFObject子类是Foo,我有另一个名为Bar的PFObject子类,带有指向Foo的指针。我在飞行模式下运行以下所有内容:

Foo *foo = [Foo objectWithoutDataWithObjectId:@"someObjectIdFromServer"];
foo.someKey = @"someValue";

Bar *bar = [Bar object];
bar.foo = foo;
[bar pinInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {

    if (succeeded && !error) {

    // Now I query from the local datastore:

    PFQuery *query = [Bar query];
    [query includeKey:@"foo"];
    [query fromLocalDatastore];
    [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
        if (!objects || error) {
            // error
        } else {
            Bar *bar = [objects firstObject];
            NSLog(@"bar.foo: %@", bar.foo); // this prints the object out fine
            NSLog(@"bar.foo.isDataAvailable: %d", bar.foo.isDataAvailable); // this is 0, even though I called [query includeKey:@"foo"];
            NSLog(@"bar.foo.someKey: %@", bar.foo.someKey); // this silently doesn't return.  No exception raised or nil value, execution just stops here
            NSLog(@"more logging");  // this doesn't print but program execution continues
            [bar.foo fetchFromLocalDatastoreInBackground];  // trying this just in case
            NSLog(@"bar.foo.isDataAvailable: %d", bar.foo.isDataAvailable); // still 0 even with fetch
        }
    }];
  }
}];

任何想法为什么bar.foo.isDataAvailable为0,即使我调用[query includeKey:@“foo”]甚至提取?我的理解是objectWithoutDataWithObjectId可用于在解析云中创建对象的本地副本,然后可以在指针关系中使用。我是否误解了仅在使用本地数据存储区时(即在飞行模式下)可以对这些对象做些什么?

此外,我尝试了同样的事情,没有使用objectWithoutDataWithObjectId(而是做[Foo对象]),并且工作正常。我可以在解决方法中使用它(以及一些Cloud Code以确保我的静态数据的唯一性),但我不愿意这样做,因为这会影响我的云数据配额。

非常感谢任何反馈!

0 个答案:

没有答案