Прежде всего, я упомяну, что я видел много ответов на этот тип вопросов на этом сайте и на других, но я не могу связать эти решения с моей проблемой.Однако я прошу прощения, если ответ, который я ищу, уже существует или оказывается невероятно простым (хотя я определенно надеюсь, что это так).
Я пытаюсь добавить функциональность Core Dataв мое существующее приложение, и я предпринял следующие шаги:
a.Добавлены инфраструктура Core Data и импорт CoreData в соответствующие файлыб.Добавил файл модели данных в мою папку ресурсов с именем «MyProject.xcdatamodeld» и добавил сущности / атрибуты в модель данных.Я также создал класс для каждой сущности.с.В мой AppDelegate.h добавлены следующие свойства / метод:
@property (readonly, strong, nonatomic) NSManagedObjectModel* managedObjectModel;
@property (readonly, strong, nonatomic) NSManagedObjectContext* managedObjectContext;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator* persistentStoreCoordinator;
-(NSString*)applicationDocumentsDirectory;
d.Добавил следующий код в мой AppDelegate.m:
@synthesize managedObjectModel = __managedObjectModel;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
-(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;
}
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return __managedObjectModel;
}
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyProject.sqlite"]];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if(![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error])
{
/*Error for store creation should be handled in here*/
}
return __persistentStoreCoordinator;
}
-(NSString *)applicationDocumentsDirectory
{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
Проблема в том, что при выполнении этой строки:
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
Я получаю исключение NSInvalidArgumentException, сообщающее, что вставляется нулевой объектв NSArray.
Я попытался заменить этот код следующим:
NSURL* modelURL = [[NSBundle mainBundle] URLForResource:@"MyProject" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
, и с этим я не получаю никаких исключений, но после выполнения этих строк __managedObjectModel
все еще ноль.
Я не могу понять, что случилось.Любые идеи?
(В качестве дополнительного примечания я использую ARC, поэтому вы не видите никаких звонков для сохранения).
Любая помощь / предложения очень ценятся.
Спасибо,
BJ