2012-05-05 2 views
0

Я создаю очень простое приложение для хранения данных о таких людях, как имя, возраст и т. Д. Я предоставляю пользователю возможность изменять данные, например, когда у человека есть день рождения. Я не могу найти лучший способ хранения данных.Сохраняются ли объекты, добавленные или замененные в изменяемом массиве?

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

До сих пор я не могу этого сделать. У меня есть опыт работы на сервере MySql и Sql, поэтому, если это возможно, я склонен идти в этом направлении, но мне бы очень хотелось использовать измененный массив или изменяемый словарь, если это возможно. Это может быть такой элементарный вопрос, но я не могу найти ответ нигде.

ответ

1

У вас есть какие-то неправильные представления.

Объекты, которые вы создаете, находятся в памяти. В них нет ничего постоянного. Вы должны их каким-то образом сохранить или они ушли, когда вы покинули приложение и вернулись.

Если вы хотите сохранить массив, у вас есть несколько вариантов.

Если массив содержит только объекты типа NSString, NSData, NSDate, NSNumber, NSArray или NSDictionary, вы можете сохранить массив, используя системный класс NSUserDefaults.

NSArray также имеет метод writeToFile: atomically: это сохранит массив данных в файле.

Если ваш массив содержит какие-либо объекты, кроме перечисленных выше типов, ни один из этих подходов (NSUserDefaults или writeToFile: atomically) не будет работать.

Другой вариант - использовать NSKeyedArchiver для преобразования содержимого вашего массива в данные и затем записать эти данные в файл. Для того, чтобы этот подход работал, каждый отдельный объект i ваш массив и все объекты в этих объектах должны поддерживать протокол NSCoding.

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

0

Mutable означает, что вы можете изменить данные в любое время, так что нет, это не является постоянным.

0

Да, это будет постоянным с точки зрения того, что вы просите. Хотя, поскольку массив изменен, это означает, что вы всегда можете изменить данные обратно, исходные данные будут перезаписаны этими новыми данными.

Редактировать: Нет, информация не останется после закрытия приложения. Вам необходимо программно сохранить его. Я бы использовал Core Data.

+0

Это не о чем вопрос; OP хочет знать, каким образом массив каким-то образом сохраняется на диске или иным образом доступен в его измененном состоянии при следующем запуске программы. –

+0

Могу ли я проверить это с помощью симулятора IOS. Я не могу получить данные для постоянного добавления в массив. Когда я закрываю симулятор, данные пропадают. – attentionjay

+1

Жак Кусто имеет это право. Мне нужно, чтобы данные были доступны при следующем запуске приложения. – attentionjay

1

Взгляните на основные данные. Это самый простой способ управлять этим типом хранения данных в iOS.

Посмотрите на мою книгу, он получил хорошие отзывы и идеально подходит для того, что вы пытаетесь сделать: http://www.amazon.com/Pro-Core-Data-iOS-Professionals/dp/1430233559

Если вы хотите простой способ, чтобы начать работу, есть тонны онлайн учебники тоже. Например Рэй написал некоторые хорошие вещи:

http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started

+0

Я думаю, что это направление, я должен идти. Я тоже могу использовать SQLite. – attentionjay

+0

вы можете напрямую использовать SQLite да. Но, честно говоря, Core Data сохранит вам бесчисленные часы отладки и шаблона кода. И он поддерживается SQLite по умолчанию на iOS. :) – mprivat

+0

Основные данные - это ответ. Спасибо за помощь. – attentionjay

0

CoreData - это способ, которым данные обычно сохраняются в какао и какао-Touch. Это также дает вам некоторые приятные дополнения, такие как поддержка отмены. Но у него есть большая кривая обучения.

Если вы делаете это супер-просто, посмотрите на NSUserDefaults. Если вам нужна небольшая гибкость, вы всегда можете использовать NSArray-writeToFile:atomically: и -initWithContentsOfFile: (есть также версии обоих методов, которые используют URL-адреса вместо путей к файлам).

Все, что сложнее, и, вероятно, стоит изучать CoreData.

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