UIManagedDocument saveToURL completionHandler is not called - Error message: "The reader is not permitted to access the URL."
Asked Answered
R

0

7

I've got an old app that uses UIManagedDocument to interact with Core Data. However on iOS 11.2 (and possibly earlier iOS 11 point releases) the saveToURL:forSaveOperation:completionHandler: method seems to have stopped working both on-device and in the simulator (however it does still work in the iOS 10.3.1 simulator). Specifically, in the code below the completionHandler inside the first if statement is never executed (as NSLog messages indicate).

- (void)useDemoDocument {
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"TWL_Document"];
    UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url];

    if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
        NSLog(@"This Code Executes");
        [document saveToURL:url
           forSaveOperation:UIDocumentSaveForCreating
          completionHandler:^(BOOL success) {
              if (success) {
                  NSLog(@"But this is never called");
                  self.managedObjectContext = document.managedObjectContext;
              } else {
                  NSLog(@"This also is not called");
              }
          }];
    } else if (document.documentState == UIDocumentStateClosed) {
        [document openWithCompletionHandler:^(BOOL success) {
            if (success) {
                self.managedObjectContext = document.managedObjectContext;
            }
        }];
    } else {
        self.managedObjectContext = document.managedObjectContext;
    }
}

Instead I get an error message that The reader is not permitted to access the URL.:

2017-12-17 12:38:14.258936-0800 ToWatchList[1864:542434] [default] [ERROR] Could not get attribute values for item /var/mobile/Containers/Data/Application/2[UUID]/Documents/TWL_Document (n). Error: Error Domain=NSFileProviderInternalErrorDomain Code=1 "The reader is not permitted to access the URL." UserInfo={NSLocalizedDescription=The reader is not permitted to access the URL.}

What's going on here? Any suggestions on how to get this working again in iOS 11?

Reader answered 17/12, 2017 at 20:56 Comment(3)
I have encountered the very same error but with UIDocument. However, it continues to successfully save after the error. See my question: #48050171Cattegat
Thanks @Cattegat it seems to be working as you describe: continuing to save after the error. (Other errors were causing related failures when I wrote the question a few weeks ago). Leaving the question up for now in hopes there's a fix in iOS 11.3 or iOS 12 because it's still a bad/weird error.Reader
Having a similar problem. although in my case the thread opening the doc just gets stuck. I have seen an a "permission" problem error once or twice but not consistent (all on device). Only resetting the device completely allows a successful save of a new file. #48370071Bimetallic

© 2022 - 2024 — McMap. All rights reserved.