具有UIDocumentPickerModeOpen模式的UIDocumentPickerViewController不授予在xcode(iOS)中编辑文件的权限

时间:2017-09-27 06:33:35

标签: ios objective-c iphone xcode

我希望用户从文件应用程序中选择一个文件,然后我将读取该文件的内容,修改它并将其写在同一位置。

我试图使用以下代码打开文件:

UIDocumentPickerViewController *documentProvider;
documentProvider = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[NSArray arrayWithObjects:@"public.comma-separated-values-text", nil] inMode: UIDocumentPickerModeOpen];
documentProvider.delegate = self;
documentProvider.modalPresentationStyle = UIModalPresentationOverFullScreen;

代表职能:

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url { NSLog(@"%@", url.absoluteString); }

但是当我尝试查看或编辑该文件时,显示的错误是我没有查看/写入权限。

我收到的网址是file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/filename.csv

有没有办法获得iCloud中文件的权限?我发现很少有第三方应用程序可以修改文件的内容。

1 个答案:

答案 0 :(得分:2)

您需要通过安全范围的书签访问该文件。像这样:

- (void) documentPicker: (UIDocumentPickerViewController *) controller
   didPickDocumentAtURL: (NSURL *) url
{
    if (controller.documentPickerMode == UIDocumentPickerModeOpen)
    {
            BOOL isAccess = [url startAccessingSecurityScopedResource];
            if(!isAccess)
            {
                return;
            }

            NSError * fileOpenError = nil;
            NSString * fileContents = [NSString stringWithContentsOfURL: url
                                                               encoding: NSUTF8StringEncoding
                                                                  error: &fileOpenError];

            // FileContents should now be set properly.

            [url stopAccessingSecurityScopedResource];
    }
}