Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SharedObject不在Ipad上保存数据_Ios_Actionscript 3_Ipad_Flash - Fatal编程技术网

Ios SharedObject不在Ipad上保存数据

Ios SharedObject不在Ipad上保存数据,ios,actionscript-3,ipad,flash,Ios,Actionscript 3,Ipad,Flash,我一直在开发一个使用SharedObject的生产力应用程序。它将自定义类保存为基本对象和变量。它在我的电脑上的模拟器上运行得很好,但一旦我在我的ipad第1代上测试它,它就不工作了。应用程序将适当地设置背景,但当我关闭背景进程并重新打开应用程序时,所有条目都将消失。我还没有支付开发者费用,因为我不确定是否要投资,所以我使用的是假证书和越狱设备。这会停止保存数据吗?同样,它在pc上的工作原理与需要完全相同,但当我在ipad上关闭应用程序进程时,它不会保存任何内容 编辑:我修好了 好的,问题很简单

我一直在开发一个使用SharedObject的生产力应用程序。它将自定义类保存为基本对象和变量。它在我的电脑上的模拟器上运行得很好,但一旦我在我的ipad第1代上测试它,它就不工作了。应用程序将适当地设置背景,但当我关闭背景进程并重新打开应用程序时,所有条目都将消失。我还没有支付开发者费用,因为我不确定是否要投资,所以我使用的是假证书和越狱设备。这会停止保存数据吗?同样,它在pc上的工作原理与需要完全相同,但当我在ipad上关闭应用程序进程时,它不会保存任何内容

编辑:我修好了
好的,问题很简单,由于脚本错误,刷新没有调用常规更改,而关闭时的刷新在应用程序从后台关闭时不起作用。基本上,我把它设置为在主页按钮上保存,在电源按钮上保存,并修复了所有的小保存。现在效果很好。文件太多,因为我存储了一个自定义类数组。

为了避免添加到注释链中,我只写一个答案

正如我在评论中所说,大多数AIR开发人员出于各种原因避免使用SharedObjects。它们被限制在100kb左右,您无法控制它们,而且显然是在iOS上刷新的

尽管如此,大多数AIR开发人员更喜欢使用文件和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(与文件系统通信的文件流)来编写对象

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打开它们

obj2将具有与obj相同的特性,并且它们将与最初保存的对象相匹配。值得注意的是,这些对象与自定义对象的类型不同。除非它们是原语Object、Array、String、Number、int、uint或其他一些,否则从字节流读取的每个对象(无论是ByteArray、FileStream、URLStream等)都将被类型化为标准对象。不过,你可以用它来解决这个问题


编辑:请注意,在iOS上,如果File.preventBackup不是首选项,则应始终将其设置为true。否则苹果将拒绝它。不过,好消息是,这些设置应该备份到iCloud,并在安装之间保持不变。

哦,在iOS上开发的乐趣。>>我没有回答,因为我不是100%确定,但我认为当进程结束时,共享对象在垃圾收集中会被清除。你能把代码发布到保存共享对象的地方吗?我怀疑发生的是它没有被调用,而不是共享对象被破坏。我在任何时候更改变量时都会调用它。我也在结束时再次呼吁它。它不应该不打电话。我也会在关闭时手动冲洗它。我无法用trace测试flush是否有效,因为它在ipad上,而flash无法在越狱时进行实时诊断。我使用NativeApplication.NativeApplication.addEventListener Event.EXITS和onExitHandler进行关闭。其他的一切都是当每件事都改变了,它会重新保存数据以防万一。我真的觉得这可能是因为越狱。因为没有正确的证书和p12,您无法在ios设备上安装应用程序。由于我使用fake发布ipa,然后越狱并使用appsync,可能ios没有授予它权限。但如果可能的话,我很想知道。我认为你需要支付100美元来开发和测试你的应用程序真的很愚蠢。我理解提交,但测试应该是免费的……无论如何,在AIR开发中,SharedObject通常是避免的,而偏向于File和FileStream。SharedObject有一个100kb的限制,这实际上只适用于保存设置。而且,即使这样,我个人还是更喜欢文件,因为我对它有更多的控制权。谢谢,这太完美了!
fs.open(f, FileMode.OPEN);
var obj2:Object = fs.readObject();
fs.close();