2014-04-24 2 views
0

일부 용도로이 새 개체를 통해 모든 Dropbox로 작동하는 싱글 톤을 만들었습니다.iOS dropbox api oauth_token 오류

그래서 나는 다음과 같이 초기화 코드와 다음 싱글을 가지고 : 당신이 볼 수있는 경우

- (id)init 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.cloudName = @"Dropbox"; 

     DBSession* dbSession = [[DBSession alloc] initWithAppKey:DP_App_KEY 
                 appSecret:DP_App_SECRET 
                  root:ROOT]; 

     [DBSession setSharedSession:dbSession]; 

     self.restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]]; 
     self.restClient.delegate = self; 
    } 
    return self; 
} 

내 싱글 init 메소드에 직접 DBSession을 초기화하기. 응용 프로그램 호출 init 메서드와 모든 것이 잘 작동해야합니다. 나는 응용 프로그램에 로그인 할 때

그래서 URL 열기 방법이를 호출

if ([[DBSession sharedSession] isLinked]) 

여기에 응용 프로그램 출력 보관이 연결되어 있는지,하지만 난 루트 @에 대한 메타 데이터를 얻기 위해 시도 "/"폴더 이 오류

[self.restClient loadMetadata:folder]; 

응용 프로그램 출력 : (파일 목록)이 메소드를 호출

[WARNING] DropboxSDK: error making request to /1/metadata/dropbox - (403) Parameter not found: oauth_token 
2014-04-25 00:30:15.652 PDF-Notes[75257:70b] Error loading metadata: Error Domain=dropbox.com Code=403 "The operation couldn’t be completed. (dropbox.com error 403.)" UserInfo=0xb666600 {path=/, error=Parameter not found: oauth_token} 

하지만 RER 때 한 번 더 Xcode를 통해 응용 프로그램을 취소하면 모두 잘 작동합니다. 또한 앱 위임에 DBSession을 설정하면 작동합니다. 호출 메소드가 같은 방식으로 작동하기 때문에 실제로 싱글 톤에서 작동하지 않는 이유를 이해할 수 없었습니다. 그러나 응용 프로그램에서 DBSession을 초기화하면 문제없이 작동합니다.

답변

2

우선 세션이 링크 된 후에 만 ​​REST 클라이언트를 만들어야합니다. 이렇게하면 DBRestClient가 실제 세션에 연결될 수 있습니다.

두 번째 문제는 응용 프로그램과 함께 장치에 Dropbox 응용 프로그램이 설치되어있는 경우입니다. 이 경우 응용 프로그램에서 인증을 DB 응용 프로그램으로 밀어 올립니다.

세 번째 - 클래스에 대한 - (id) init 구현은 싱글 톤이 아닙니다. 싱글 톤은 개체가 하나의 공통 개체에만 존재하고 레크리에이션을 수행 할 수없는 패턴입니다. Objective C는 유지 보수 횟수도 고려해야합니다 (아크 코드가 아닌 경우 메모리 관리 메소드를 재정의해야 함). 그러나 (종종 공유 인스턴스라고도 함) 어쨌든 init 메소드에서처럼 보일 것입니다 :

static Singleton * sharedInstance= nil; 
+(Singleton *) sharedInstance 
{ 

    static dispatch_once_t once_token = 0; 
    dispatch_once(&once_token,^
        { 
         sharedInstance = [Singleton new]; 
        }); 
    return sharedInstance ; 
} 

희망이 네, 감사 DB 통합

+0

당신을 도움이 될 것입니다. 나는 또한 다른 방법을 추가하여 그것을 고쳤다. 처음에는 세션이 생겼고 나머지 클라이언트는 유효하거나 허가 된 세션과 일치하지 않는 세션으로 초기화되었으므로 나머지 클라이언트를 초기화합니다. 줄로 보였지만 괜찮습니다.하지만 호출 유형이 잘못되었습니다. 나는 데모 문제에 대한 싱글 톤 초기화와 init 메소드를 건너 뛴다. –