以下のコードで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];
}