4

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

错误代码:

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

 }

关键是,即使调用了这个函数,文件还是会上传到网上!

谢谢你的帮助。

4

2 回答 2

1

要检查您的帐户是否与 Dropbox 相关联,请使用此 。[[DBSession sharedSession] isLinked]返回一个BOOL

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

然后将您的文件恢复到以前的版本..

为此,您只需要清楚地了解它们

  1. 您必须加载要恢复的文件的修订版本。为此,您可以使用其中一种方法

获取文件先前版本的元数据。仅提供最多 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" limit: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];
}

因此,现在您拥有文件先前版本的元数据数组。

  1. 要恢复文件[关于恢复]

这里有两种情况:

案例1:是在Dropbox中恢复文件(这里您只在Dropbox中恢复了文件,要在您的APP中恢复文件,您必须像往常一样再次将文件加载到您的数据库中

案例2:是恢复您的数据库中的文件(*这里您只能在应用程序的数据库中恢复您的文件,但不能在Dropbox中恢复您的文件,要在Dropbox中恢复请按照案例1:*)

案例 1:在 Dropbox 中恢复文件

// 恢复路径中的文件,因为它存在于给定 rev 中,并在恢复后返回恢复文件的元数据

 - (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:仅在 App 的数据库中恢复文件(不在 Dropbox 中)

/* 这将加载一个文件,因为它存在于给定的 rev */

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

于 2012-12-08T08:42:05.343 回答
0

您可以使用 Reachability 来检查特定主机:reachabilityWithHostName:

@implementation DDViewController {
    Reachability *r;
}

- (void)viewDidAppear:(BOOL)animated {
    self.view.backgroundColor = [UIColor yellowColor];
    if(!r) {
        r = [Reachability reachabilityWithHostName:@"dropbox.com"];
        [r startNotifier];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    }
}

- (void)reachabilityChanged:(NSNotification*)note {
    NSLog(@"%@", note);
    self.view.backgroundColor = [note.object isReachable]?[UIColor greenColor] : [UIColor redColor];
}

--TODO: 获取 DBRESTClient 使用的真实主机名--

于 2012-12-08T09:44:33.897 回答