0

以下のコードでself.theFilesは、null. を呼び出した後[self.restClient loadMetadata:@"/"]getFilesメソッドは機能し続けるためです。

ファイルリストを取得してデータをオブジェクトに入れるために、getFilesメソッドが完了するまで待機する必要があります。しかし、その後、働き続けます。[self.restClient loadMetadata:@"/"]self.theFiles[self.restClient loadMetadata:@"/"]getFiles

@synthesize theFiles;

- (void)getFiles:(CDVInvokedUrlCommand*)command
{
    if (![[DBSession sharedSession] isLinked]) {
        [[DBSession sharedSession] linkFromController:self];
    }
    else
    {
        [self.restClient loadMetadata:@"/"];
    }
    NSLog(self.theFiles); //Prints null
    NSLog(@"Finished");
}

#pragma mark DBRestClientDelegate methods

- (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata {

    NSArray* validExtensions = [NSArray arrayWithObjects:@"txt", @"text", nil];
    NSMutableArray* newPhotoPaths = [NSMutableArray new];
    for (DBMetadata* child in metadata.contents) {
        self.theFiles=child.path;
        NSString* extension = [[child.path pathExtension] lowercaseString];
        if (!child.isDirectory && [validExtensions indexOfObject:extension] != NSNotFound) {
            [newPhotoPaths addObject:child.path];
        }
    }

    NSLog(self.theFiles); //Prints the file list
}

出力:

null
Finished
/file1.txt
/file2.txt
..... the file list in my dropbox

私の getFiles メソッドをデリゲートと同期的に動作させることは可能ですか?

アップデート

コードを更新しました。を使用してスレッドをロックしたいのですNSLockが、機能しません。同じ結果です。

@synthesize theFiles;

- (void)getFiles:(CDVInvokedUrlCommand*)command
{
    if (![[DBSession sharedSession] isLinked]) {
        [[DBSession sharedSession] linkFromController:self];
    }
    else
    {
       if ([self.theLock tryLock]) {
        [self.restClient loadMetadata:@"/"];
        NSLog(self.theFiles); //Prints null
        NSLog(@"Finished");
       }
    }

}

#pragma mark DBRestClientDelegate methods

- (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata {

    NSArray* validExtensions = [NSArray arrayWithObjects:@"txt", @"text", nil];
    NSMutableArray* newPhotoPaths = [NSMutableArray new];
    for (DBMetadata* child in metadata.contents) {
        self.theFiles=child.path;
        NSString* extension = [[child.path pathExtension] lowercaseString];
        if (!child.isDirectory && [validExtensions indexOfObject:extension] != NSNotFound) {
            [newPhotoPaths addObject:child.path];
        }
    }

    NSLog(self.theFiles); //Prints the file list
    [self.theLock unlock];
}
4

0 に答える 0