1

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

假设我的静态数据的 PFObject 子类是 Foo,并且我有另一个 PFObject 子类,名为 Bar,带有一个指向 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 object]),效果很好。我可能会在解决方法中使用它(以及一些云代码以确保我的静态数据的唯一性),但我不希望这样做,因为这会计入我的云数据配额。

任何反馈都非常感谢!

4

0 回答 0