Сохранение данных в приложениях iPhone

При разработке моего первого серьезного приложения для iPhone (что означает, что я действительно хотел бы разместить его в AppStore) мне нужен был хороший способ представления моих данных. Вместо того, чтобы работать с основными данными, я (как мне кажется, по глупости) решил использовать классы для представления моих данных.

Я создал три класса: MMDot, MMShowMovement и MMShow. MMShowMovement содержит экземпляры класса MMDot в массиве, так как MMShow содержит экземпляры MMShowMovement. Звучит как хороший способ сделать это, каждый класс имеет много логики, которая связана с ним, поэтому я подумал, что классы кажутся хорошим способом представления всех этих данных.

У меня вопрос: есть ли простой способ сохранить экземпляры этих классов, чтобы я мог восстановить данные после повторного открытия приложения? Я создавал приложения для OS X с помощью NSKeyedArchiver, будет ли это похоже на iPhone? Было бы легче начать снова, используя Core Data (эти объекты очень сложные, особенно MMDot с примерно 15 переменными экземпляра, теперь, когда я смотрю на это, возможно, не НАСТОЛЬКО сложный)?

Я действительно в растерянности.


person Matt Egan    schedule 04.01.2010    source источник
comment
Я бы переделал модель на использование CoreData   -  person Mitch Wheat    schedule 04.01.2010


Ответы (3)


Вы можете абсолютно использовать NSKeyedArchiver для сохранения ваших объектов. Я поклонник любого метода, решение в основном зависит от потребностей вашего приложения. Я не думаю, что будет много работы по моделированию ваших объектов в CoreData. Не зная ничего о вашем приложении, я бы сказал, что если вы выполняете простую персистентность с простой моделью, вам могут не понадобиться Core Data, если у вас сложные отношения и вы будете часто читать / сохранять данные во время сеанса приложения Core Data, вероятно, способ идти.

person Greg Martin    schedule 04.01.2010
comment
Определенно согласен с этой оценкой - архивирование и разархивирование с ключом поддерживается на iPhone, поэтому, если у вас есть относительно простые объекты и вы знакомы с архитектурой, дерзайте. С другой стороны, Core Data могут быть очень полезными для объектных отношений - они также предоставляют множество других преимуществ (см. stackoverflow.com/questions/1883879/ ) - person Tim; 04.01.2010
comment
MMDot имеет около 15 атрибутов, большинство из которых - NSIntegers и NSStrings, классы MMShow и MMShowMovement имеют около трех атрибутов каждый. MMShowMovement будет содержать от 40 до 100 экземпляров MMDot, а MMShow будет содержать около 4 экземпляров MMShowMovement. Единственная связь между классами состоит в том, что MMDot имеет атрибут counts, а MMShowMovement будет хранить NSInteger общего количества счетчиков. Думаю попробовать воспользоваться архивированием. Если похоже, что это будет слишком медленно. Я перейду к Core Data. - person Matt Egan; 04.01.2010

Если у вас много экземпляров объектов, вам, вероятно, лучше использовать Core Data - это поможет кэшировать вещи, поможет вам с запросами для получения определенных наборов объектов и так далее. KeyArchiving действительно намного полезнее, если вы сохраняете несколько экземпляров, но у него есть некоторые недостатки - в частности, труднее отследить утечки памяти из разархивированных объектов.

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

person Kendall Helmstetter Gelner    schedule 04.01.2010

На днях я искал сериализацию своих классов и решил использовать NSUserDefaults. Я просто даю всем внутренним компонентам своих объектов уникальный ключ на основе объекта. Похоже, у меня быстро сработало.

Написал об этом в блоге здесь: http://technolojiadev.blogspot.com/2009/12/serialize-this.html

person Cairo    schedule 05.01.2010