gpt4 book ai didi

iOS 保管箱 api oauth_token 错误

转载 作者:行者123 更新时间:2023-11-28 22:09:06 26 4
gpt4 key购买 nike

出于某种目的,我创建了单例,通过这个新对象组织所有使用 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;
}

如果你能看到我直接在我的单例初始化方法中初始化 DBSession。应用程序调用 init 方法,似乎一切正常。

因此,当我登录应用程序时,会在 open url 方法中调用它:

if ([[DBSession sharedSession] isLinked])

应用程序在这里输出 dropbox 已链接,但是当我尝试获取根 @"/"文件夹(文件列表)的元数据并调用此方法时:

[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 重新运行应用程序时,一切正常。此外,如果我在应用程序委托(delegate)中设置 DBSession,它也可以工作。我真的不明白为什么它在单例中不起作用,因为调用方法以相同的方式工作,但只有当我们在应用程序中初始化 DBSession 它才能正常工作。

最佳答案

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

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

第三 - 你为你的类实现的 - (id) init 不是单例。单例是一种模式,当你的对象只存在于一个公共(public)对象中并且无法进行再创造时。在 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 ;
}

希望这对您进行数据库集成有帮助

关于iOS 保管箱 api oauth_token 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com