【问题标题】:Dropbox iOS SDK - Requests are not sentDropbox iOS SDK - 未发送请求
【发布时间】:2013-09-06 12:08:18
【问题描述】:

我正在使用 Dropbox Core API,当我想发送一个简单的 [restClient loadMetadata:@"/"] 请求以测试我的应用程序时,我既没有收到错误消息,也没有收到成功的响应。我用 Charles 嗅探我的流量,看来 Dropbox SDK 没有发送任何请求。我的应用程序已链接。我已经复制粘贴了他们提供的代码。在这里。

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    if ([[DBSession sharedSession] handleOpenURL:url]) {
        if ([[DBSession sharedSession] isLinked]) {
            NSLog(@"App linked successfully!");
// At this point you can start making API calls
            DBRestClient *restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
            restClient.delegate = self;

                [restClient loadMetadata:@"/"];       
        }
        return YES;
    }
    // Add whatever other url handling code your app requires here
    return NO;

}

我的控制台上也显示“应用链接成功”。

【问题讨论】:

  • 这个代码在 AppDelegate.m 文件中吗???
  • 是的。这是粘贴到 UIApplication 委托 -(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 方法中的代码
  • 看我的回答,我的朋友.....
  • [restClient loadMetadata:@""] 将其替换为[restClient loadMetadata:@"/"],您是否实现了委托方法loadedMetadata:loadMetadataFailedWithError:
  • 是的,方法实现了。在我的问题中,我已经明确表示该应用程序不发送请求。是的,这里有一个错字,在我的问题中,我得到了[restClient loadMetadata:@"/"]

标签: iphone ios objective-c dropbox dropbox-api


【解决方案1】:

Dropbox iOS SDK 中存在与内存管理相关的错误。 以下是我在 Dropbox 论坛上的帖子的引述:

当 DBRESTClient 实例被声明为局部变量时,它 在作用域结束时被释放。它可能发生在之前 实际上它完成了一个请求。因此,连接 被取消,我们无法收到回调。为了避免这种情况 DBRESTClient 应该在它开始任何请求时保留自己,并且 完成后释放自己。

我在遇到此问题时发现了它: https://forums.dropbox.com/topic.php?id=105110

【讨论】:

    【解决方案2】:

    你可以做的是,首先用下面的函数替换你的那个函数(你发布的函数)......(在 Appdelegate.m 文件中)

       - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
    if ([[DBSession sharedSession] handleOpenURL:url])
    {
        if ([[DBSession sharedSession] isLinked])
        {
            NSLog(@"App linked successfully!");
            // At this point you can start making API calls
    
            NSArray *tmp=[self.navigationController viewControllers];
            for(int i=0;i<[tmp count];i++){
                if([[tmp objectAtIndex:i] isKindOfClass:[YourViewController class]]){//YourViewController is a class in which you want to implement dropbox sdk...
                    //[self.navigationController popToViewController:[tmp objectAtIndex:i] animated:YES];
                    [[tmp objectAtIndex:i]  uploadToDropBox];
                    break;
                }
    
            }
        }
        return YES;
    }
    return NO;
    }
    

    现在在文件所在的“YourViewController”类中,您要在 dropbox 上上传该文件。在该文件(.m 文件)中写入以下代码

      -(void)uploadToDropBox
    {
        NSString *strzipname=[NSString stringWithFormat:@"%@_Document.zip",strname];
        NSString *path = [DOCUMENTS_FOLDER stringByAppendingPathComponent:strzipname];
        NSString *destDir = @"/";
         restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];//DBRestClient *restClient; declare object in .h file
        restClient.delegate = self;
    
       [restClient uploadFile:strzipname toPath:destDir withParentRev:nil fromPath:path];//strzipname is a file name,"path" is path where that file is located
    }
    

    终于实现了dropbox的委托方法……

         - (void)restClient:(DBRestClient*)client uploadedFile:(NSString*)destPath
              from:(NSString*)srcPath metadata:(DBMetadata*)metadata {
    
    NSLog(@"File uploaded successfully to path: %@", metadata.path);
     }
    
    - (void)restClient:(DBRestClient*)client uploadFileFailedWithError:(NSError*)error {
    NSLog(@"File upload failed with error - %@", error);
     }
    

    不要忘记在 .h 文件中声明 uploadToDropBox...

    让我知道它是否有效!!!

    快乐编码!!!!

    【讨论】:

    • ` - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url` 已被弃用。我实现的方法是它的继承者。很抱歉,您的回答没有内容价值。
    • 好的。请删除这个被破坏的函数并编写你的函数,即 -(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation ,不要更改函数内的主体.只需更改函数名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多