0

我已经开始使用 StackMob 将 Facebook 集成到我的应用程序中。我一直在尝试使用 StackMob 的离线同步,但它似乎坏了。

在 didFinishLaunchingWithOptions 中:

SM_CACHE_ENABLED = YES;
SMClient *client = [[SMClient alloc] initWithAPIVersion:@"0" publicKey:@"cc5f57c8-4a5d-424d-a3e1-0594c675cad8"];
SMCoreDataStore *coreDataStore = [client coreDataStoreWithManagedObjectModel:self.managedObjectModel];
coreDataStore.cachePolicy = SMCachePolicyTryCacheOnly;
_managedObjectContext = [coreDataStore contextForCurrentThread];

当用户使用 Facebook 登录时:

[[SMClient defaultClient] loginWithFacebookToken:FBSession.activeSession.accessTokenData.accessToken createUserIfNeeded:YES usernameForCreate:nil onSuccess:^(NSDictionary *result) {
                            NSLog(@"Logged in with StackMob!");
                            NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
                            [self.managedObjectContext executeFetchRequest:fetchRequest returnManagedObjectIDs:NO onSuccess:^(NSArray *results) {
                                NSLog(@"users: %@",results);
                            } onFailure:^(NSError *error) {
                                NSLog(@"error: %@",error);
                            }];

                            } onFailure:^(NSError *error) {
                                NSLog(@"Error: %@", error);
                            }];

问题是 fetchRequest 的结果是一个空数组,尽管用户已成功创建。当我将缓存策略更改为 SMCachePolicyTryCacheElseNetwork 时,fetchRequest 的结果不是空数组。

为什么用户没有保存在缓存中?另外,我怎样才能告诉 StackMob 只在缓存中保存一些对象?

太感谢了!

4

1 回答 1

1

这听起来像是一个错误,您可以在此处报告。您可以解决此问题,因此您不必通过使用每个请求缓存策略来全局设置 SMCachePolicyTryCacheElseNetwork。将您的获取请求更改为:

SMRequestOptions *options = [SMRequestOptions options];
options.cachePolicy = SMCachePolicyTryCacheElseNetwork;

[self.managedObjectContext executeFetchRequest:fetchRequest
                        returnManagedObjectIDs:NO
                          successCallbackQueue:dispatch_get_main_queue()
                          failureCallbackQueue:dispatch_get_main_queue()
                                       options:options
                                     onSuccess:(SMResultsSuccessBlock)successBlock
                                     onFailure:(SMFailureBlock)failureBlock];

请注意,每个请求的缓存策略需要最新的 2.1 SDK。

于 2013-08-04T16:16:00.367 回答