Dropbox的同步API不会下载任何文件 [英] Dropbox Sync API Won't Download Any Files

查看:245
本文介绍了Dropbox的同步API不会下载任何文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在挣扎这两天了,但我不能得到它的工作。的我与这个战斗的部分原因是,官方的Dropbox同步API教程做了非常差的工作,解释如何完成这件事。

到目前为止,我可以写使用Dropbox的API,但是得到任何东西正在对自己完全不同的野兽任何东西。

我有以下的code(道歉,如果这是混乱的 - 我一直在测试了很多,它迟早会弄乱它只是自然的)在我的应用程序委托的 - (空) applicationDidBecomeActive:(UIApplication的*)应用方法:


 如果([[[DBAccountManager sharedManager] LINKEDACCOUNT] isLinked])
    {        DBError * ERRI =零;
        如果(!self.collectionsFile.open)
        {
            DBPATH *的新路径= [[DBPATH根] childPath:[的NSString stringWithFormat:@元/%@,@user_collections.json]];
            //self.collectionsFile = [[DBFilesystem sharedFilesystem] CREATEFILE:错误的新路径:无];
            self.collectionsFile = [[DBFilesystem sharedFilesystem]中openFile:的新路径错误:&放大器; ERRI]。
        }        DBFileStatus * newerStatus = self.collectionsFile.newerStatus;
        DBFileStatus *状态= self.collectionsFile.status;        的NSLog(@%@ ERRI,erri.localizedDescription);
        __block的NSString *内容= [self.collectionsFile readString:无];
        的NSLog(@目录%@的内容);        [self.collectionsFile的addObserver:自我块:^(){
            的NSLog(@之称观察家);
            如果([DBFilesystem sharedFilesystem] completedFirstSync])
            {
                的NSLog(@第一个同步完成);
                如果(newerStatus!=无)
                {
                    的NSLog(@文件正在下载);
                }其他
                {
                    的NSLog(@我在这里花花公子%@的内容);
                    的NSString *元= [(FTIBAppDelegate *)[[UIApplication的sharedApplication]代表] getMetadataPath];
                    * NSString的collectionsFile = [的NSString stringWithFormat:@%@ /%@,元数据,@user_collections.json零]
                    [内容将writeToFile:collectionsFile原子:无编码:NSUTF8StringEncoding错误:无];
                }                如果(status.cached)
                {
                    的NSString *元= [(FTIBAppDelegate *)[[UIApplication的sharedApplication]代表] getMetadataPath];
                    * NSString的collectionsFile = [的NSString stringWithFormat:@%@ /%@,元数据,@user_collections.json零]
                    [内容将writeToFile:collectionsFile原子:无编码:NSUTF8StringEncoding错误:无];
                }
            }
        }];
    }


每当我重新安装我的应用程序和Dropbox的链接,我得到这个漂亮的输出:

  2014年1月21日15:58:24.171 Mignori [913:60B]应用成功链接!
2014年1月21日15:58:24.301 Mignori [913:60B] [WARNING] ERR:
DROPBOX_ERROR_USAGE:sync.cpp:210:检查文件路径文件之前
类型信息被取出。等待第一次同步,以避免创建
文件,该文件可能无法稍后上传。 2014年1月21日15:58:24.473
Mignori [913:60B] [错误] ERR:DROPBOX_ERROR_ALREADYOPEN:file.cpp:188:
P(/v1/t5.json)已经打开(1)2014年1月21日15:58:24.528
Mignori [913:60B] DropboxSync错误 - 错误域= dropbox.com
code = 2004的操作无法完成。(dropbox.com错误
2004年)的UserInfo = {0x17028ba0 DESC = file.cpp:188:P(/v1/t5.json)已经打开(1)} 2014年1月21日15:58:24.531 Mignori [913:60B]操作
无法完成。 (dropbox.com错误2004年)ERRI 2014年1月21日
15:58:24.532 Mignori [913:60B]目录(空)

几件事情要记住:


  1. 文件(user_collections.json)在我的Dropbox确实存在 - 我有一个不同的设备更新它

  2. 我的文件是应用程序委托强烈的属性。

我将AP preciate任何帮助来得到这个工作。即使是一个(好)样本code。关于如何完成这件事。我可以更新Dropbox的文件,都没有问题,但下载它们正在被更加复杂,比我的预期。


解决方案

的问题是,我试图打开文件时,未完成初始同步。你必须等待,直到它完成。设置一个NSThread如果你的文件系统的completeFirstSync完成后经常检查。

I have been struggling with this for two days now, but I cannot get it to work. Part of the reason I'm fighting with this is that the official Dropbox Sync API tutorial does a very poor job explaining how to get this done.

So far I can write anything using the Dropbox API, but getting anything is being a whole different beast on its own.

I have the following code (apologies if it is chaotic - I have been testing a lot and it's just natural it will clutter up sooner or later) in my app delegate's - (void)applicationDidBecomeActive:(UIApplication *)application method:

    if([[[DBAccountManager sharedManager] linkedAccount] isLinked])
    {

        DBError *erri = nil;
        if(!self.collectionsFile.open)
        {
            DBPath *newPath = [[DBPath root] childPath:[NSString stringWithFormat:@"metadata/%@", @"user_collections.json"]];
            //self.collectionsFile = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil];
            self.collectionsFile = [[DBFilesystem sharedFilesystem] openFile:newPath error:&erri];
        }

        DBFileStatus *newerStatus = self.collectionsFile.newerStatus;
        DBFileStatus *status = self.collectionsFile.status;

        NSLog(@"%@ erri", erri.localizedDescription);
        __block NSString *contents = [self.collectionsFile readString:nil];
        NSLog(@"Contents %@", contents);

        [self.collectionsFile addObserver:self block:^(){
            NSLog(@"Observer called");
            if([[DBFilesystem sharedFilesystem] completedFirstSync])
            {
                NSLog(@"First sync done");
                if(newerStatus != nil)
                {
                    NSLog(@"File is downloading.");
                }else
                {
                    NSLog(@"Im here dude %@", contents);
                    NSString *metadata = [(FTIBAppDelegate *)[[UIApplication sharedApplication] delegate] getMetadataPath];
                    NSString *collectionsFile = [NSString stringWithFormat:@"%@/%@", metadata, @"user_collections.json", nil];
                    [contents writeToFile:collectionsFile atomically:NO encoding:NSUTF8StringEncoding error:nil];
                }

                if(status.cached)
                {
                    NSString *metadata = [(FTIBAppDelegate *)[[UIApplication sharedApplication] delegate] getMetadataPath];
                    NSString *collectionsFile = [NSString stringWithFormat:@"%@/%@", metadata, @"user_collections.json", nil];
                    [contents writeToFile:collectionsFile atomically:NO encoding:NSUTF8StringEncoding error:nil];
                }
            }
        }];
    }

Whenever I reinstall my app and link Dropbox again, I get this beautiful output:

2014-01-21 15:58:24.171 Mignori[913:60b] App linked successfully!
2014-01-21 15:58:24.301 Mignori[913:60b] [WARNING] ERR:
DROPBOX_ERROR_USAGE: sync.cpp:210: Checking file path before file
types info has been fetched.  Wait for first sync to avoid creating a
file which may fail to upload later. 2014-01-21 15:58:24.473
Mignori[913:60b] [ERROR] ERR: DROPBOX_ERROR_ALREADYOPEN: file.cpp:188:
p(/v1/t5.json) already open (1) 2014-01-21 15:58:24.528
Mignori[913:60b] DropboxSync error - Error Domain=dropbox.com
Code=2004 "The operation couldn’t be completed. (dropbox.com error
2004.)" UserInfo=0x17028ba0 {desc=file.cpp:188: p(/v1/t5.json) already open (1)} 2014-01-21 15:58:24.531 Mignori[913:60b] The operation
couldn’t be completed. (dropbox.com error 2004.) erri 2014-01-21
15:58:24.532 Mignori[913:60b] Contents (null)

A couple of things to keep in mind:

  1. The file (user_collections.json) does exist in my Dropbox - I'm updating it with a different device.
  2. My File is a strong property of the app delegate.

I will appreciate any help to get this to work. Even a (better) sample code on how to get this done. I can update files in Dropbox with no problem at all, but downloading them is being much more complicated than I expected.

解决方案

The problem was that I was trying to open the file when the initial sync wasn't completed. You have to wait until it's done. Set an NSThread to constantly check if your filesystem's completeFirstSync is completed.

这篇关于Dropbox的同步API不会下载任何文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆