最近在使用.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;
		/**
		 * 返回一个共享对像,指定文件名和路径
		 * @param	soFileName:文件名
		 * @param	path:文件路径
		 */
		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


//fla测试文件:
var so:MySharedObject=new MySharedObject("test","/");
var i:int,j:int;
var soData:Object=so.read();
//将所有元素值改为1
for (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]);
	}
}

你可能感兴趣的:(.net,Flash,J#)