iOS dropbox api oauth_token错误

时间:2014-04-24 21:37:16

标签: ios dropbox-api

出于某种目的,我创建了单例,通过这个新对象组织Dropbox的所有作品。

所以我有下面的单例,初始化代码如下:

- (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;
}

如果你能看到我在我的singleton init方法中直接初始化DBSession。应用程序调用init方法,似乎一切都应该运行良好。

因此,当我登录应用程序时,请在打开的URL方法中调用它:

if ([[DBSession sharedSession] isLinked])

和app输出这里Dropbox已链接,但是当我尝试获取root @" /"的元数据时文件夹(文件列表)并调用此方法:

[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}

但是当我再次通过Xcode重新运行app时,一切都运行良好。此外,如果我在app delegate中设置DBSession,它也可以。我真的不明白为什么它在单例中不起作用,因为调用方法以相同的方式工作,但只有在app中初始化DBSession它才能正常工作。

1 个答案:

答案 0 :(得分:2)

首先 - 您必须在会话链接后才创建REST客户端 - 这将确保您将DBRestClient连接到真实会话。

第二 - 如果您的应用程序在设备上安装了Dropbox应用程序,则可能会出现问题。在这种情况下,您的应用程序将推送到数据库应用程序的身份验证。

第三 - 你的类的 - (id)init的实现不是单例。当您的对象仅存在于一个公共对象中并且无法进行重新创建时,单例是一种模式。我的目标C我们也必须关注保留计数(在非Arc代码中,shode是被覆盖的内存管理方法)。但无论如何,你的init方法(通常称为共享实例)应如下所示:

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

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

希望这可以帮助您进行数据库集成