背景信息:我希望我的游戏应用程序完全脱机工作,因此用户无需连接互联网即可开始播放(某些功能将在没有连接的情况下被禁用)。为此,我从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以确保我的静态数据的唯一性),但我不愿意这样做,因为这会影响我的云数据配额。
非常感谢任何反馈!