背景:我希望我的游戏应用程序完全离线工作,这样用户就不需要互联网连接即可开始玩(某些功能将在没有连接的情况下被禁用)。为此,我从 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]),效果很好。我可能会在解决方法中使用它(以及一些云代码以确保我的静态数据的唯一性),但我不希望这样做,因为这会计入我的云数据配额。
任何反馈都非常感谢!