2015-02-20 9 views
16

Ich versuche, ein Dokument mit UIDocumentInteractionController in der Vorschau anzuzeigen. Das Dokument ist eine .xls-Datei, die von meiner App aus dem Internet heruntergeladen wird. Ich erhalte diese Fehlermeldung:UIDocumentInteractionController "ungültiges Schema (null)"

'UIDocumentInteractionController: invalid scheme (null). Only the file scheme is supported.' 

Ich benutze den nächsten Code:

- (void) webServiceController:(WebServiceController *)webServiceController returnedArray:(NSMutableArray *)array { 
    if ([webServiceController.webRequest isEqualToString: @"generateExcelFileForEmployee"]) { 
     // start previewing the document at the current section index 
     NSString *link = [[NSString stringWithString:array[0]] stringByReplacingOccurrencesOfString:@"AdminFunctions.php" withString:@"AdminFunctions.xls"]; 
     link = [[[link stringByReplacingOccurrencesOfString:@"\\" withString:@""]stringByReplacingOccurrencesOfString:@"/public/sites/" withString:@"http://"]stringByReplacingOccurrencesOfString:@"\"\\\"" withString:@""]; 
     NSLog(@"%@", link); 
     NSData *urlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:link]]; 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"AdminFunctions.xls"]; 

     BOOL isWriteSuccess = [urlData writeToFile:filePath atomically:YES]; 
     NSLog(@"%@", filePath); 

     if(isWriteSuccess) //success 
     { 
      file = [NSURL fileURLWithPath:filePath]; 

      self.fileView = [self setupControllerWithURL:file usingDelegate:self]; 

      [self.fileView presentPreviewAnimated:YES]; 
     } 
     else 
     { 
      NSLog(@"file not written"); 
     } 
    } 
} 

- (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate { 

    UIDocumentInteractionController *interactionController = 
    [UIDocumentInteractionController interactionControllerWithURL: fileURL]; 
    interactionController.delegate = interactionDelegate; 

    return interactionController; 
} 

- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller { 
    return self; 
} 

Beiden Methoden in dem Viewcontroller implementiert werden, in dem ich die Vorschau präsentieren will. Ich weiß, dass ich die Daten im urlData Objekt hart bekomme, weil, wenn ich Haltepunkte einfüge, die Konsole sagt, dass sie 6144 Bytes enthält, was genau die Größe des Dokuments zum Herunterladen ist.

Ich habe seit einer Weile für das ruhige gesucht, aber ich kann nicht scheinen, herauszufinden, wie man das löst. Ich habe bereits versucht, für die documentInteractionController im link Objekt als Quelle setzen, aber dann die Fehler Änderungen an:

'UIDocumentInteractionController: invalid scheme (http). Only the file scheme is supported.' 

Anmerkungen zu, wie ich dieses Problem überwinden kann, wäre sehr

+0

Haben Sie, dass f geprüft ile wurde erfolgreich geschrieben oder nicht, da Sie denselben Dateipfad in UIDocumentInteractionController verwenden? –

+0

Die einzige Möglichkeit, die ich überprüft habe, ist durch NsLogging der Dateipfad, aber das sagt nicht wirklich, ob die Datei gespeichert wurde, oder? Jetzt ist es das erste Mal für mich, einen Document Interaction Controller zu implementieren. Könnten Sie mir bitte erklären, wie Sie das überprüfen können? – Joris416

+0

Ich habe Ihre Frage mit dem Hinzufügen von Vaidation für erfolgreich geschriebene Datei bearbeitet oder nicht. Jetzt ersetzen Sie es und versuchen, was passiert ??? –

Antwort

45

Versuchen zu verwenden

geschätzt werden
file = [NSURL fileURLWithPath:filePath]; 

statt

file = [NSURL URLWithString:filePath]; 
+4

Danke !! der Teufel steckt in den Details – Joris416

+1

das hat den Trick gemacht, .danke –

Verwandte Themen