2012-04-13 4 views
1

Ich habe es schwer, den FileTransfer in Cordova 1.6.0 zu arbeiten. Ich habe es in früheren Versionen nicht ausprobiert, also weiß ich nicht, ob das ein neues Problem ist oder nicht.Cordova Fileupload Fehler in xcode - "WebKit verworfen eine nicht abgefangene Ausnahme"

var options = new FileUploadOptions(); 
options.fileKey = "file"; 

var ft = new FileTransfer(); 
ft.upload( 
    imageURLToLocalFile, 
    urlToMyServiceEndpoint, 
    successhandler, 
    errorhandler, 
    options 
); 

In der Xcode-Konsole sehe ich.

*** WebKit discarded an uncaught exception in the 
webView:decidePolicyForNavigationAction:request:frame:decisionListener: 
delegate: <NSRangeException> *** 
-[JKArray objectAtIndex:]: index (1) beyond bounds (1) 

Mir scheint, dass, wenn die Cordova exec Funktion die nativen Filehandler Funktionen dies geschieht ruft, aber ich habe keine Ahnung, wie die Fehlermeldung zu interpretieren.

Ich bin ein wenig verdächtig über den Aufruf, der den Fehler erstellt, die Funktion FileTransfer.prototype.upload in der Cordova-Datei. Ich die 1.6.0 Version ist:

exec(
    successCallback, 
    errorCallback, 
    'FileTransfer', 
    'upload', 
    [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode] 
); 

Während die ältere 1.5.0 Version ist:

Cordova.exec(
    successCallback, 
    errorCallback, 
    'org.apache.cordova.filetransfer', 
    'upload', 
    [options] 
); 
+0

Haben Sie mit diesem Fehler kein Glück gehabt? – kim3er

+0

Nein, ich musste eine andere Lösung verwenden und verwendete schließlich die FileTransfer-Methode nicht, sondern verwendete stattdessen die jquery ajax-Funktion. – axxxman

Antwort

2

Dies ist ein Fehler in Cordova 1.6.x ist, die in Cordova 1.7.0 behoben ist darauf zurückzuführen zu sein (https://issues.apache.org/jira/browse/CB-543).

Die Problemumgehung besteht darin, alle Optionen (Dateiname, Dateischlüssel usw.) manuell anzugeben, da das Framework sie fälschlicherweise als obligatorisch behandelt.

So:

var options = new FileUploadOptions(); 
options.fileKey = "file"; 

Becomes:

var options = new FileUploadOptions(); 
options.fileKey = "file"; 
options.fileName = "image.jpg"; 
options.mimeType = "image/jpeg"; 
options.chunkedMode = true; 
options.params = {}; // This line is untested as I have actual params 

Reiche

0

Sieht aus wie die Upload-Methode hat sich geändert. Ich hatte ähnliches Problem, das durch Zugabe von wahr nach Optionen gelöst wurde:

var ft = new FileTransfer(); 
ft.upload(

    imageURLToLocalFile, 
    urlToMyServiceEndpoint, 
    successhandler, 
    errorhandler, 
    options, 
    **true** 
); 
Verwandte Themen