检查Dropbox是否正在响应Reachability iOS

时间:2012-12-06 13:03:04

标签: ios cocoa-touch dropbox

我使用Dropbox从Dropbox帐户上传和下载共享文件。这意味着每个用户都可以下载最新版本的文件,修改它并重新上传,替换之前的文件。如果有稳定的互联网连接,此过程有效,但如果互联网没有响应,则文件将被破坏,并且将上载未完成的文件版本。这会损坏所有用户。有没有办法检查Dropbox服务器是否有稳定的互联网连接?我尝试了可达性,但它只控制互联网连接,而不是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];

 }

关键是即使调用此函数,文件仍会上传到互联网上!

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

为此你必须清楚地理解它们

  1. 您必须加载要恢复的文件的revisions。 为此你可以使用这些方法之一
  2. 获取文件以前版本的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”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. 要恢复文件 [About Restore]
    2.   

      这里有两种情况:

           

      案例1:是在Dropbox中恢复文件   (此处您只在Dropbox中恢复了文件,要在APP中恢复文件,您必须像往常一样将文件重新加载到数据库

           

      案例2:恢复数据库中的文件(*这里你可以恢复你的   仅在App的数据库中存档,但在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中)

      / *这将加载一个文件,因为它存在于给定的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];

答案 1 :(得分: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使用的真实主机名 -