2014-01-21 39 views
0

我一直在爲此掙扎兩天了,但我無法讓它工作。我與之戰鬥的部分原因是官方的Dropbox Sync API教程在解釋如何完成這件事方面做得很差。Dropbox Sync API不會下載任何文件

到目前爲止,我可以使用Dropbox API編寫任何東西,但獲得任何東西都是獨立的完全不同的野獸。

我有以下代碼(道歉,如果這是混亂的 - 我一直在測試了很多,它遲早會弄亂它只是自然)在我的應用程序委託的- (void)applicationDidBecomeActive:(UIApplication *)application方法:

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

每當我重新安裝我的應用程序和Dropbox的鏈接,我得到這個漂亮的輸出:

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) 

幾件事情要記住:

  1. 文件(user_collections.json)確實存在於我的Dropbox中 - 我用其他設備更新它。
  2. 我的文件是應用程序委託的強大屬性。

我會很感激任何幫助,讓這個工作。即使是一個(更好的)示例代碼,瞭解如何完成此操作。我可以在Dropbox中更新文件而沒有任何問題,但下載它們比我預期的要複雜得多。

回答

2

問題是我在初始同步未完成時試圖打開文件。你必須等到它完成。設置一個NSThread來不斷檢查你的文件系統的completeFirstSync是否完成。

+1

或者,而不是線程輪詢,在'DBFilesystem'上使用'addObserver'。 – smarx

+0

更好的主意。再次感謝@smarx。 –