最近在使用.minerva3.3.0的时候发现了一个bug
//1.将一个二维数组存入sol文件
//2.二维数组如下:
/*var chapters:Array = new Array(10);
chapters[0] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[1] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[2] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[3] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[4] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[5] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[6] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[7] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[8] = [0, 0, 0, 0, 0, 0, 0, 0];
chapters[9] = [0, 0, 0, 0, 0, 0, 0, 0];*/
//3.ctrl+Enter测试本文件,然后点击输入-修改-输入-修改,反复这样的操作,输出一切正常;
//4.可以自己更改:soData.chapters[3][4]=0;来测试
//5.问题来了:使用.minerva 3.3.0打开test.sol文件,然后什么都不修改,直接点击"Save"按钮
//6.再试一下第三个步骤,看看输出还是不是正常?
//7.我的测试是不正常的,只修改其中一个数组时,竟然会影响其他数组,这应该是.minerva的一个bug
//MySharedObject.as文件代码:
package {import flash.net.SharedObject;/** * 将数据写入共享对像 * @author zkl * 2011-5-3 15:44 */public class MySharedObject {//实例化一个SharedObject对像public var so:SharedObject;/** * 返回一个共享对像,指定文件名和路径 * @paramsoFileName:文件名 * @parampath:文件路径 */public function MySharedObject(soFileName:String, soPath:String = "/"):void {//返回一个本地的永久共享对像,如果不存在则创建。if (so != null) so = null;so = SharedObject.getLocal(soFileName, soPath);//初始化数据if (so.size == 0) {var i:int, j:int;var objData:Object = { };var chapters:Array = new Array(10); //chapters[0] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[1] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[2] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[3] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[4] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[5] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[6] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[7] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[8] = [0, 0, 0, 0, 0, 0, 0, 0];chapters[9] = [0, 0, 0, 0, 0, 0, 0, 0];so.data.chapters = chapters;so.flush();}else {read();}}/** * 返回文件大小 0表示文件不存在 */public function get size():uint {return so.size;}/** * 写入数据 */public function write(obj:Object):void {for (var s:String in obj){so.data[s] = obj[s];}so.flush();}/** * 读取数据 */public function read():Object {var objData:Object = new Object();for (var s:String in so.data){objData[s] = so.data[s];}return objData;}} //end class} //end package
var so:MySharedObject=new MySharedObject("test","/");var i:int,j:int;var soData:Object=so.read();//将所有元素值改为1for (i=0; i<10; i++) {for (j=0; j<8; j++) {soData.chapters[i][j]=1;}}so.write(soData);//输出traceBtn.addEventListener(MouseEvent.CLICK,traceHandler);var n:int=0;function traceHandler(e:MouseEvent):void {soData=so.read();trace("输出============================" + n++);for (i=0; i<10; i++) {trace(soData.chapters[i]);}}//修改testBtn.addEventListener(MouseEvent.CLICK,testHandler);function testHandler(e:MouseEvent):void {//1.使用.minerva打开test.sol,然后什么都不修改直接点“save”//2.这时再修改试试,看看修改其中一个值,会不会影响其他的值//修改一个值,试试它会影响哪些soData.chapters[3][4]=0;so.write(soData);soData=so.read();trace("修改后:");for (i=0; i<10; i++) {trace(soData.chapters[i]);}}