4

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

 }

ポイントは、この関数が呼び出されても、ファイルはまだインターネットにアップロードされているということです!

助けてくれてありがとう。

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. ファイルを復元するには【復元について】

ここでは、次の 2 つのケースがあります。

ケース 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];

于 2012-12-08T08:42:05.343 に答える
0

到達可能性を使用して、特定のホストを確認できます。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 に答える