icloud doesn't update the download precess

2.5k views Asked by At

Usually, my code is ok to download the files from iCloud. But sometimes the downloading process will not be updated.

Following are some code snips:

start download:

            NSFileManager*  fm = [NSFileManager defaultManager];
        if (![fm startDownloadingUbiquitousItemAtURL:file error:nil]) {
            return NO;
        }

        /////////////////////////
        id query = [[icloudClass alloc] init];
        _query = query;

        [query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];

        NSArray *listItems = [[file path] componentsSeparatedByString:@"/"];

        NSPredicate *pred = [NSPredicate predicateWithFormat: @"%K == %@", NSMetadataItemFSNameKey, [listItems objectAtIndex:[listItems count] -1] ];
        NSLog(@"filename = %@", [listItems objectAtIndex:[listItems count] -1]);
        [query setPredicate:pred];

       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDownloading:) name:NSMetadataQueryDidUpdateNotification object:query];

        [query startQuery];

update download:

    -(void)updateDownloading:(NSNotification *)notification {
    id query = [notification object];


    if ([query resultCount] /*>=*/ == 1) {
        for (int i=0; i<[query resultCount]; ++i) {
            NSMetadataItem *item = [query resultAtIndex:i];

            //debug
            NSNumber* isDownloading = [item valueForAttribute:NSMetadataUbiquitousItemIsDownloadingKey];
            NSNumber* isDownloaded  = [item valueForAttribute:NSMetadataUbiquitousItemIsDownloadedKey];
            NSNumber* perDownloading = [item valueForAttribute:NSMetadataUbiquitousItemPercentDownloadedKey];

            NSLog(@"isDownloaded=%@", [isDownloaded boolValue]?@"Yes":@"No");
            NSLog(@"isDownloading=%@", [isDownloading boolValue]?@"Yes":@"No");
            NSLog(@"percent downloaded=%f", [perDownloading doubleValue]);
            //

            if ([isDownloaded boolValue]) {

                [query disableUpdates];
                [query stopQuery];
                [[NSNotificationCenter defaultCenter] removeObserver:self name:NSMetadataQueryDidUpdateNotification object:query];
                _query = nil;


                NSLog(@"----------end download!------------------");



            }

        }//end for
    } 
}

please note that the update function will only be invoked once with the following console print, and never will be invoked even restart the app.

Jan 10 15:20:27 unknown *[1383] <Warning>: isHasConflict=No
Jan 10 15:20:27 unknown *[1383] <Warning>: isDownloaded=No
Jan 10 15:20:27 unknown *[1383] <Warning>: isDownloading=No
Jan 10 15:20:27 unknown *[1383] <Warning>: percent downloaded=0.000000

Does anyone met this problem before?

0

There are 0 answers