簡體   English   中英

將iCloud集成到ios App中並從iCloud檢索文件

[英]Integrate iCloud into ios App and Retrieve files from iCloud

我使用raywenderlich https://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1將iCloud集成到iOS應用中

但是iam無法將iCloud中的所有文件顯示到我們的iOS應用中,並且還需要特定類型的文件,例如pdf,doc和docx

誰能建議我。

遵循本指南

https://www.raywenderlich.com/12779/icloud-and-uidocument-beyond-the-basics-part-1

在以下位置下載示例代碼

https://github.com/rwenderlich/PhotoKeeper

檢查iCloud是否可用

- (void)initializeiCloudAccessWithCompletion:(void (^)(BOOL available)) completion {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        _iCloudRoot = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
        if (_iCloudRoot != nil) {
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"iCloud available at: %@", _iCloudRoot);
                completion(TRUE);
            });            
        }            
        else {
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"iCloud not available");
                completion(FALSE);
            });
        }
    });
}

查詢蒼蠅的類型,例如pdf,doc和docx

- (NSMetadataQuery *)documentQuery {

    NSMetadataQuery * query = [[NSMetadataQuery alloc] init];
    if (query) {

        // Search documents subdir only
        [query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];

        // Add a predicate for finding the documents
        NSString * filePattern = [NSString stringWithFormat:@"*.%@", PTK_EXTENSION];
        [query setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE %@",
                             NSMetadataItemFSNameKey, filePattern]];        

    }
    return query;

}

請按照以下步驟將iCloud集成到iOS應用中並檢索文件。 1.從您的開發人員帳戶啟用iCloud。 2.在開發人員帳戶中創建iCloud容器權利。 3.然后,在要集成iCloud集成的位置使用下面的代碼。

首先導入#import並添加iCloudDelegate委托,然后設置委托:

                // Setup iCloud
            [[iCloud sharedCloud] setDelegate:self];
            [[iCloud sharedCloud] setVerboseLogging:YES];
            [[iCloud sharedCloud] setupiCloudDocumentSyncWithUbiquityContainer:nil];

            [self showiCloudFiles];

然后執行下面的方法showiCloudFiles

-(void) showiCloudFiles{

BOOL cloudAvailable = [[iCloud sharedCloud] checkCloudAvailability];
if (cloudAvailable && [[NSUserDefaults standardUserDefaults] boolForKey:@"userCloudPref"] == YES) {
    UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.content"]
                                                                                                            inMode:UIDocumentPickerModeImport];
    documentPicker.delegate = self;
    documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentViewController:documentPicker animated:YES completion:nil];

}
else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"userCloudPref"] == NO) {

    UIAlertController * alert = SIMPLE_ALERT_VIEW(@"iCloud Disabled", @"You have disabled iCloud for this app. Would you like to turn it on again?");
    UIAlertAction* cancelButton = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action){}];[alert addAction:cancelButton];
    UIAlertAction* deleteButton = [UIAlertAction actionWithTitle:@"Turn On iCloud"
                                                           style:UIAlertActionStyleDefault
                                                         handler:^(UIAlertAction * action){
                                                             [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"userCloudPref"];
                                                             [[NSUserDefaults standardUserDefaults] synchronize];

                                                             BOOL cloudAvailable = [[iCloud sharedCloud] checkCloudAvailability];
                                                             if (cloudAvailable && [[NSUserDefaults standardUserDefaults] boolForKey:@"userCloudPref"] == YES) {
                                                                 UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.content"]
                                                                                                                                                                         inMode:UIDocumentPickerModeImport];
                                                                 documentPicker.delegate = self;
                                                                 documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
                                                                 [self presentViewController:documentPicker animated:YES completion:nil];

                                                             }
                                                         }];
    [alert addAction:deleteButton];
    [self presentViewController:alert animated:YES completion:nil];

} else {

    UIAlertController * alert = SIMPLE_ALERT_VIEW(@"Setup iCloud", @"iCloud is not available. Sign into an iCloud account on this device and check that this app has valid entitlements.");
    UIAlertAction* cancelButton = [UIAlertAction actionWithTitle:@"Okay" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action){}];[alert addAction:cancelButton];                                                                
                                                         }];
    [self presentViewController:alert animated:YES completion:nil];

}

}

之后,使用UIDocumentPickerDelegate方法下載文件:

 #pragma mark - UIDocumentPickerDelegate
-(void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url{
if (controller.documentPickerMode == UIDocumentPickerModeImport) {
    //NSLog(@"%@",url);


    [url startAccessingSecurityScopedResource];
    NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] init];
    NSError *error;
    __block NSData *fileData;

    [coordinator coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingForUploading error:&error byAccessor:^(NSURL *newURL) {
// File name for use in writing the file out later
NSString *fileName = [newURL lastPathComponent]; NSString *fileExtension = [newURL pathExtension]; if([fileExtension isEqualToString:@"zip"]) {if([[[newURL URLByDeletingPathExtension] pathExtension] isEqualToString:@"pages"] ||
      [[[newURL URLByDeletingPathExtension] pathExtension] isEqualToString:@"numbers"] ||
      [[[newURL URLByDeletingPathExtension] pathExtension] isEqualToString:@"key"] ) {
       // Remove .zip if it is an iWork file
       fileExtension = [[newURL URLByDeletingPathExtension] pathExtension];
       fileName = [[newURL URLByDeletingPathExtension] lastPathComponent];
}
} 
NSError *fileConversionError;fileData = [NSData dataWithContentsOfURL:newURL options:NSDataReadingUncached error:&fileConversionError];
        // Do further code using  fileData
        }
    }];
[url stopAccessingSecurityScopedResource];
    }
}

對於UIDocumentPicker,請訪問此鏈接iOS-8-UIDocumentPicker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM