我正在使用保管箱从保管箱帐户上传和下载共享文件。这意味着每个用户都可以下载该文件的最新版本,对其进行修改并重新上传,以替代之前的版本。如果存在稳定的Internet连接,则此过程有效,但是如果Internet没有响应,则文件将被破坏,并且将上传不完整的文件版本。这将损坏所有用户。有没有办法检查与保管箱服务器之间是否存在稳定的互联网连接?我尝试了可达性,但它只能控制Internet连接,而不能控制保管箱服务器。

错误代码:

- (void)restClient:(DBRestClient*)client uploadFileFailedWithError:(NSError*)error {
NSLog(@"File upload failed with error - %@", error);

UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"Offline mode" message:@"Your event is going to be posted when you create a new event." delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles: nil];
[alert1 show];

 }

关键是,即使调用此函数,该文件仍会上传到Internet上!

谢谢你的帮助。

最佳答案

要检查您的帐户是否与保管箱关联,请使用this。返回[[DBSession sharedSession] isLinked]值的BOOL

    if ([[DBSession sharedSession] isLinked]) {
       // write your code here..
   }

然后将您的文件还原到以前的版本..

为此,您只需要清楚地了解它们
  • 您必须加载要还原的文件的revisions
    为此,您可以使用以下任一方法

  • 获取文件的先前版本的metadata
    仅提供30天以内的修订版本。

    /* Loads a list of up to 10 DBMetadata objects representing past revisions of the file at path */
    - (void)loadRevisionsForFile:(NSString *)path;
    
    /* Same as above but with a configurable limit to number of DBMetadata objects returned, up to 1000 */
    - (void)loadRevisionsForFile:(NSString *)path limit:(NSInteger)limit;
    

    例如 :
    [[[self restClient] loadRevisionsForFile:@“YourFile”限制:10];

    和这些委托方法,从中可以获取文件的修订值数组
    - (void)restClient:(DBRestClient*)client loadedRevisions:(NSArray *)revisions forFile:(NSString *)path;
    - (void)restClient:(DBRestClient*)client loadRevisionsFailedWithError:(NSError *)error;
    

    例如:
    - (void)restClient:(DBRestClient*)client loadedRevisions:(NSArray *)revisions forFile:(NSString *)path {
    
        NSArray  *dbRevisionsArray = revisions;
    }
    - (void)restClient:(DBRestClient*)client loadRevisionsFailedWithError:(NSError *)error{
    
        [[[UIAlertView alloc] initWithTitle:@"Oops!!!" message:@"Please try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
    }
    

    因此,现在您有了文件以前版本的元数据数组。
  • 恢复文件 [About Restore]

  • 这里有两种情况:

    情况1:是在Dropbox中还原文件
    (在这里,您仅在Dropbox中还原了文件,要将还原的文件保存在APP中,您必须照常将其再次加载到数据库中)

    情况2:是还原数据库中的文件(*此处您可以还原
    文件仅在应用程序的数据库中,不在Dropbox中,要在Dropbox中还原,请遵循案例1:*)

    案例1:在Dropbox中还原文件

    //恢复给定版本中存在路径的文件,并在恢复后返回已恢复文件的元数据
     - (void)restoreFile:(NSString *)path toRev:(NSString *)rev;
    

    //及其委托方法
     - (void)restClient:(DBRestClient*)client restoredFile:(DBMetadata *)fileMetadata;
     - (void)restClient:(DBRestClient*)client restoreFileFailedWithError:(NSError *)error;
    

    例如:
           DBMetadata *metaData = [dbRevisionsArray objectAtIndex:row];
          NSString *revStr = metaData.rev;
    [[self restClient] restoreFile:@"yourFilePath" toRev:revStr];
    

    然后将文件加载到您的数据库路径。

    而已 ,。

    情况2:仅在应用程序的数据库中还原文件(不在Dropbox中)

    / *这将加载给定版本中存在的文件* /
    - (void)loadFile:(NSString *)path atRev:(NSString *)rev intoPath:(NSString *)destPath;
    
    - (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath contentType:(NSString*)contentType metadata:(DBMetadata*)metadata;
    - (void)restClient:(DBRestClient*)client loadFileFailedWithError:(NSError*)error;
    

    例如:[[self restClient] loadFile:@"yourFile" atRev:revStr intoPath:toYourDatabasePath];

    07-24 20:53