2014-01-06 3 views
0

Я разрабатываю приложение для повышения производительности, которое использует SharedObject. Он сохраняет пользовательские классы в качестве основных объектов и переменных. Он отлично работает на моем компьютере на эмуляторе, но как только я тестирую его на первом ipad 1-го поколения, он не работает. Приложение будет работать соответствующим образом, но когда я закрою фоновый процесс и снова открою приложение, все записи исчезнут. Я не заплатил плату за разработчика, так как не уверен, хочу ли я еще инвестировать, поэтому я использую поддельный сертификат и джейлбрейк-устройство. Это остановит сохранение данных? Снова он работает точно так же, как и необходимость на ПК, но когда я закрываю процесс приложения на своем ipad, он ничего не спасает.SharedObject не сохраняет данные на Ipad

EDIT: I FIXED IT Хорошо, проблема заключалась в том, что флеши не вызывали регулярные изменения из-за ошибки сценария, а одна из них закрыта, не работает, когда приложение закрыто от фонового рисунка. В основном я установил его для сохранения на домашней кнопке, а также на кнопке включения питания, а также фиксировал все остальное. Прекрасно работает. Файлы были слишком эскизными причинами. Я храню массив пользовательских классов.

+1

О, радости разработки на iOS. >.> Я не отвечаю, потому что я не уверен на 100%, но я думаю, что SharedObjects уничтожаются в сборке мусора, когда процесс заканчивается. – CodeMouse92

+0

Можете ли вы опубликовать код, в котором вы сохраняете общий объект? Я подозреваю, что то, что происходит, это не вызов, а не разделяемый объект. –

+0

Я называю это в любое время, когда меняю переменную. Я также называю это снова при закрытии. Не должно быть способа, которым он не звонит. Я также закрываю его вручную. Я не могу проверить со следом, чтобы увидеть, работает ли флеш, потому что на ipad и flash не могу жить в диалоговом режиме в джейлбрейке. Я использую NativeApplication.nativeApplication.addEventListener (Event.EXITS, onExitHandler) для закрытия. И все остальное - это когда все что-то меняется, оно сохраняет данные на всякий случай. – user3167032

ответ

0

Чтобы избежать добавления в цепочку комментариев, я просто напишу ответ.

Как я уже сказал в своем комментарии, большинство разработчиков AIR не используют SharedObject s по разным причинам. Они ограничены ~ 100 кб, у вас нет контроля над ними и, по-видимому, сбрасываются на 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, что и взаимодействует с файловой системой, чтобы написать объект.

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().

EDIT: Как быстро записка, на прошивке, вы всегда должны установить File.preventBackup истинен, если они ничего, кроме предпочтений. Apple отвергает это в противном случае. Хорошей новостью является то, что эти настройки должны быть скопированы в iCloud и сохраняться между установками.

+0

Спасибо, это прекрасно! – user3167032

Смежные вопросы