Просто для пояснения всех шагов, которые вам действительно нужно выполнить, чтобы добавить базовые данные в проект, в котором раньше их не было:
Шаг 1: Добавить платформу
Нажмите на цель вашего приложения (на левой панели - верхний значок с названием вашего приложения), затем перейдите на вкладку «Фазы сборки», затем «Связать двоичные файлы с библиотеками», нажмите маленький «+» в внизу найдите «CoreData.framework» и добавьте его в свой проект
Затем либо импортируйте coredata на все нужные вам объекты (несексуальным способом), используя:
#import <CoreData/CoreData.h>
или добавьте импорт ниже общего импорта в вашем файле .pch (гораздо более сексуально), например:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#endif
Шаг 2: Добавить модель данных
Чтобы добавить файл .xcdatamodel, щелкните правой кнопкой мыши / удерживайте нажатой клавишу «Control» на своих файлах на правой панели (как в папке «Ресурсы» для безопасного хранения) и выберите «Добавить новый файл». Выберите вкладку «Основные данные» при выборе типа файла затем нажмите «Модель данных», дайте ему имя, нажмите «Далее» и «Готово», и он добавит его в ваш проект. Когда вы нажмете на этот объект Model, вы увидите интерфейс для добавления сущностей в ваш проект с любыми связями, которые вы хотите.
Шаг 3. Обновление делегата приложения
Добавьте эти объекты в AppDelegate.h
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (NSURL *)applicationDocumentsDirectory; // nice to have to reference files for core data
Синтезируйте предыдущие объекты в AppDelegate.m следующим образом:
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
Затем добавьте эти методы в AppDelegate.m (обязательно укажите название модели, которую вы добавили в показанных местах):
- (void)saveContext{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
- (NSManagedObjectContext *)managedObjectContext{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"NAMEOFYOURMODELHERE" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"NAMEOFYOURMODELHERE.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
#pragma mark - Application's Documents directory
// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
Шаг 4. Получите объекты данных в ViewControllers, где вам нужны данные
в ViewController.h
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
В ViewController.m
@synthesize managedObjectContext = _managedObjectContext;
В AppDelegate или классе, в котором создается ViewController, задайте значение managedObjectContext, совпадающее с AppDelegate one
ViewController.managedObjectContext = self.managedObjectContext;
Если вы хотите, чтобы viewcontroller, использующий Core Data, был FetchedResultsController, то вам нужно убедиться, что этот материал находится в вашем ViewController.h
@interface ViewController : UIViewController <NSFetchedResultsControllerDelegate> {
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
И это во ViewController.m
@synthesize fetchedResultsController, managedObjectContext;
После всего этого вы теперь можете использовать этот managedObjectContext для запуска всех обычных запросов fetch, необходимых для совершенства CoreData! Наслаждайтесь