Flashhilfe.de - Flash Community

IOError, trotz EventListener? [Flash 10]

 


AntwortenRegistrieren Seite1  

comiplo#1
Benutzerbild von comiplo
Beiträge: 26
Registriert: Sep 2010

02.11.2011, 20:12

Hallo.

Mit dem unteren Code bekomme ich ständig einen "Unhandled IOError", obwohl ich eigentlich auf das meiste einen EventListener gesetzt habe, der das überwachen sollte.
Es ist eine AIR-Anwendung, die mit dem "AIR for iOS"-Exporter erstellt wurde. Es sollte eine SWF-Datei laden und ausgeben. Da ich beim Laden mit Loader, ohne Temp-Datei, die ganze Zeit einen Security-Error bekam, habe ich mich entschlossen, den Inhalt der Datei binär auszulesen, und in eine temporäre Datei zu schreiben.

Fehlermeldung (tritt beim Aufruf des zweiten Schlüsselbildes auf):
ActionScript:
1Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.


Schlüsselbild 1:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import flash.events.MouseEvent;

stop();
adress_tf.text = ""; // adress_tf ist ein Textfeld auf der Bühne
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

connect_btn.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
connect_btn.addEventListener(MouseEvent.CLICK, mouseevent); //Beides, damit ich es am Computer als auch am iOS-Gerät testen kann
var adress:String;
function fl_TapHandler(event:TouchEvent)
{
     goto();
}
function mouseevent(evt:MouseEvent)
{
     goto();
}
function goto()
{
     adress = adress_tf.text;
     gotoAndStop(2);
}


Schlüsselbild 2:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.net.FileFilter;
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.events.IOErrorEvent;
import flash.errors.IOError;

status_2.text = "loading ..."; // Bühnentextfeld, wo eigentlich der Error hätte reingeschrieben werden sollen

var loader:URLLoader = new URLLoader();
var dataFormat:String = URLLoaderDataFormat.BINARY;
loader.dataFormat = dataFormat;

var urlrequest:URLRequest = new URLRequest(adress);

loader.load(urlrequest);

loader.addEventListener(Event.COMPLETE, erstelledatei);
function erstelledatei(evt:Event)
{
     var file:File = File.applicationStorageDirectory.resolvePath("temp.swf");
     file.addEventListener(IOErrorEvent.IO_ERROR, ioefs);
     var filestream:FileStream = new FileStream();
     filestream.open(file, FileMode.WRITE);
     filestream.writeBytes(loader.data);
     filestream.close();
 
     filestream.addEventListener(IOErrorEvent.IO_ERROR, ioefs);
 
 
     gotoAndStop(3);
}
loader.addEventListener(IOErrorEvent.IO_ERROR, ioerror_2);
function ioerror_2(event:IOErrorEvent)
{
     status_2.text = "ioerror appeared";
}
function ioefs(event:IOErrorEvent)
{
     status_2.text = "ioefs: " + event.text;
}


Schlüsselbild 3:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import flash.display.Loader;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.errors.IOError;

var lc:LoaderContext = new LoaderContext();
lc.allowCodeImport = true;

var req:URLRequest = new URLRequest("temp.swf");
var loader1:Loader = new Loader();
loader1.y = 20;
loader1.load(req, lc);
addChild(loader1);

loader1.addEventListener(IOErrorEvent.IO_ERROR, ioerror_3);
function ioerror_3(event:IOErrorEvent)
{
     status_3.text = "ioerror appeared";
}
Schlagwörter: ioerror ios
Werbung
Beiträge: 0
Registriert: Feb 2016


willie33#2
Benutzerbild von willie33
Beiträge: 147
Wohnort: Qo'noS
Registriert: Nov 2009

03.11.2011, 10:07

Ich glaube ich weiß wo dein Fehler liegt: Wenn du die Loader Klasse verwendest, muss du Listener für dateibezogene Events zur LoaderInfo Instanz unter der Eigenschaft contentLoaderInfo des Loader hinzufügen.
Bsp.:
ActionScript:
1ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR);
Loading comments...
comiplo#3
Benutzerbild von comiplo
Beiträge: 26
Registriert: Sep 2010

Themenautor/in

03.11.2011, 19:37

Hallo.

Danke, jetzt wird immerhin der Error ausgelöst, sodass ich ihn korrigieren konnte:

Schlüsselbild 3, Zeile 9:
ActionScript:
1var req:URLRequest = new URLRequest("temp.swf");

wurde zu
ActionScript:
1var req:URLRequest = new URLRequest("app-storage:/temp.swf");

korrigiert.

(Un)Witzigerweise funktioniert das Script nun, abgesehen von einem Security-Error, perfekt am Computer. Probiere ich es aber als *.ipa auf iOS, wird gar nichts angezeigt, also es sieht so aus, als ob der Loader im 3. Schlüsselbild leer wäre.

Der Security-Error (aus dem Ausgabe-Fenster):
ActionScript:
1
2
*** Security Sandbox Violation ***
SecurityDomain 'app-storage:/temp.swf' tried to access incompatible context 'app:/loader.swf'


Gibt es dafür auch eine Lösung?

MfG
willie33#4
Benutzerbild von willie33
Beiträge: 147
Wohnort: Qo'noS
Registriert: Nov 2009

03.11.2011, 19:51

Dafür gibt es leider keine Lösung. Du kannst auf iOS keine externen SWF-Dateien laden. So sind nun mal die Restriktionen.
Du musst diese Daten direkt in deine SWF einbetten.
Loading comments...
Werbung
Beiträge: 0
Registriert: Feb 2016


comiplo#5
Benutzerbild von comiplo
Beiträge: 26
Registriert: Sep 2010

Themenautor/in

03.11.2011, 20:24

Ahh, typisch Apple ...

Jedenfalls dankeschön für deine Bemühungen und einen schönen Abend noch. :)

MfG

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de