5 Core Data для Mac и iOS. Работа с моделями данных

Имя сущности должно начинаться с большой буквы. После большой буквы используются буквы в верхнем и нижнем регистре, и подчеркивания. Например: ShoppingCart или Shopping_cart.

Типы в Core Data:
. Undefined
. Integer 16
. Integer 32
. Integer 64
. Decimal
. Double
. Float
. String
. Boolean
. Date
. Binary Data
. Transformable

Сущность shopping cart может иметь следующие атрибуты:
. dateStarted (Date)
. dateFinished (Date)
. shopperName (String)

Имена атрибутов начинаются с маленькой буквы, и могут содержать только другие буквы, цифры, и подчеркивания. Например: dateStarted или date_Started.


Даты хранятся как Cocoa objects — NSDate. Внутреннее представление это NSTimeInterval - double содержащий количество секунд с January 1, 2001. Для дат раньше используются негативные числа. NSDate объекты показывают их даты с помощью метода description. У NSDate есть метод descriptionWithLocale, который принимает объект типа NSLocale. Предполагается что все даты Coordinated Universal Time (UTC), но это не важно если вы не используете временные зоны.

Бинарные данные можно хранить как Binary Large Objects (BLOBs) или Character Large
Objects (CLOBs). Производитель базы данных падает чем больше бинарных данных в ней хранится и чем больше пользователей одновременно пользуются БД.

В случае с SQLite database и Core Data база данных не является разделяемой.

Key-value coding может использоваться для хранения данных в iCloud и доступа к ним с разных устройств. 

Тип данных BOOL это signed char. В Objective-C вместо true и false используюся константы YES и NO. Преобразование BOOL значения в число:
myNumber = [NSNumber numberWithBool: myBool];

Сущность Item:
. itemName (String)
. itemPrice (Decimal)
. itemQuantity (Integer 16)
Таблицы Item и Cart будут связаны.

На iOS и Mac OS, Core Data поддерживает SQLite и бинарные хранилища данных; на Mac OS, также поддерживается XML.

Core Data берет свои корни из Enterprise Objects Framework, который был частью WebObjects. EOF поддерживает БД: OpenBase, MySQL, Microsoft SQL Server, Oracle, and Sybase among others. WebObjects Compatibility Guide of October 4, 2008

Файлы можно хранить по пути /~/Library/Application Support/<your app name>
Желательно чтобы вместо <your app name> был bundle identifier.
Например Bento хранит свои БД по пут /~/Library/Application Support/Bento
Файлы могут разделяться между несколькими приложениями например Mail хороший пример: /~/Library/Mail
Чтобы сделать файлы доступным для всех пользователей их можно хранить в корне, например /Library/Application Support/iWork или /Library/Desktop Pictures

Пример создания Semi-Hidden Database файла



Xcode будет хранить БД проекта по пути /~/Library/<your app name folder>


Что изменить эту папку надо в делегате приложения написать:
- (NSURL *)applicationFilesDirectory {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *libraryURL = [[fileManager URLsForDirectory:NSLibraryDirectory
inDomains:NSUserDomainMask] lastObject];
return [libraryURL URLByAppendingPathComponent:@”Core_Data_Mac”];
}
Имя файла:
NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@”Core_Data_Mac.storedata”];

NSLibraryDirectory означает /Library/
Если нужен путь /Library/Application Support/, то надо использовать NSApplicationSupportDirectory.
NSUserDomainMask указывает на домашнюю папку пользователя.
Если нужна папка в корне то надо использовать NSLocalDomainMask.

На iOS ничего особенного делать не нужно:
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] lastObject];
}
Имя файла добавляется:
NSURL *storeURL = [[self applicationDocumentsDirectory]
URLByAppendingPathComponent:@”Core_Data_iOS.sqlite”];

Чтобы сделать папку с документами приложения видимой в iTunes надо добавить в настройках Application Supports iTune Sharing.