我一直在开发一个使用SharedObject的生产力应用程序。它将自定义类保存为基本对象和变量。它在模拟器上的计算机上完美运行,但是一旦我在ipad 1st gen上测试它,它就不起作用了。该应用程序将适当地背景,但当我关闭后台进程并重新打开应用程序时,所有条目都消失了。我没有支付开发者费用,因为我不确定我是否还想投资,所以我使用假证书和越狱设备。那会停止保存数据吗?它再次完全按照PC上的需要工作,但是当我关闭我的ipad上的应用程序进程时,它不会保存任何内容。
编辑:我修复了它 好吧,问题只是由于脚本错误而导致刷新没有调用常规更改,并且当关闭应用程序从后台关闭时,关闭时不会有效。基本上我把它设置为保存在主页按钮上,并在电源按钮上以及固定所有的小保存以及。现在工作得很好。文件太草图了,因为我正在存储一组自定义类。答案 0 :(得分:0)
为避免添加到评论链,我只会写一个答案。
正如我在评论中所说,大多数AIR开发人员出于各种原因避免使用SharedObject
。它们限制在~100kb,你无法控制它们,显然是在iOS上刷新。
据说,大多数AIR开发人员更喜欢使用File
和FileStream
来直接控制设备的文件系统。
FileStream
提供了一种名为writeObject()
的方法,可以完全按照您的要求进行操作。假设您要保存以下强类型对象(注意:仅公共属性保存到磁盘):
var a:Class1 = new Class1();
var s:Class2 = new Class2();
var d:Class3 = new Class3();
var f:Class4 = new Class4();
您希望将它们合并为单个对象,或单独保存。为此,我将它们组合成一个对象。
// you could also use an array, or any other object, to do this
var obj:Object = {objA:a, objS:s, objD:d, objF:f};
然后,您希望使用File
,它是对文件系统中文件或目录的引用,以及FileStream
,它是与文件系统通信的,用于编写对象。 / p>
var f:File = File.applicationStorageDirectory.resolvePath("prefs.conf");
var fs:FileStream = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeObject(obj);
fs.close() // NEVER forget to close()
那就是它。你的对象现在保存到磁盘上了。您可以再次使用File
和FileStream
打开它们。
fs.open(f, FileMode.OPEN);
var obj2:Object = fs.readObject();
fs.close();
obj2
将具有与obj
相同的属性,它们将与您最初保存的对象相匹配。值得注意的是,这些对象不会与自定义对象的类型相同。除非它们是基元(Object
,Array
,String
,Number
,int
,uint
,或许还有其他几个),从字节流中读取(无论是ByteArray
,FileStream
,URLStream
等)将被标记为标准Object
。不过,您可以使用registerClassAlias()
解决此问题。
编辑:作为一个快速说明,在iOS上,如果它们不是首选项,则应始终将File.preventBackup
设置为true。否则Apple会拒绝它。但好消息是,应将备份到,并在安装之间保留。