2013-08-03 3 views
0

StackMob을 사용하여 내 앱에 Facebook을 통합하기 시작했습니다. StackMob의 오프라인 동기화를 사용하려고했지만 깨진 것 같습니다. didFinishLaunchingWithOptions에서StackMob With Facebook 오프라인 동기화

:

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]; 

사용자가 페이스 북에 로그인 :

[[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의 결과가 빈 상태 (empty)의 배열이 있다는 것이다. 캐시 정책을 SMCachePolicyTryCacheElseNetwork로 변경하면 fetchRequest의 결과가 빈 배열이 아닙니다.

사용자가 캐시에 저장되지 않은 이유는 무엇입니까 ?? 또한 StackMob에 캐시의 일부 객체 만 저장하도록 지시하려면 어떻게해야합니까?

정말 고마워요!

답변

1

버그가있어보고 할 수 있습니다. here. 이 문제를 해결할 수 있으므로 요청 당 캐시 정책을 사용하여 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가 필요합니다.

+0

나는 그것이 버그가 아니길 바랬다. StackMob의 Rest API를 사용하기로 결정했습니다. 안정성이 더 좋고 캐시를 완전히 제어 할 것이기 때문입니다. 고맙습니다! –