0

Во-первых, я действительно новичок в CoreData.Ручка CoreData не в RootViewController (миграция проекта-ванили)

Теперь я создал проект Vanilla CoreData и скопировал весь код в мой проект, в котором я хочу реализовать CoreData.

В проекте CoreData-ванильным, первый ViewController (MasterViewController), представляет собой контроллер, который обрабатывает managedObjectContext:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
    BilderViewController *controller = (BilderViewController *)navigationController.topViewController; 
    controller.managedObjectContext = self.managedObjectContext; 
    return YES; 
} 

Но я хочу, чтобы мой второй ViewController, чтобы справиться с CoreData:

enter image description here

Как вы видите здесь, я хочу, чтобы «Bilder» -Viewcontroller обрабатывал/использовал основные данные. Каждый метод находится в этом контроллере, поэтому он должен работать. Я уже пытался изменить метод:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    BilderViewController *controller = [[BilderViewController alloc] init]; 
    controller.managedObjectContext = self.managedObjectContext; 
    return YES; 
} 

Но чем, я получаю сообщение об ошибке:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Event''

Мой managedObjectContext-метод:

// Returns the managed object context for the application. 
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. 

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 

Как я могу это исправить ?

Btw: В конце концов, кто-то также знает, почему прототип-ячейка не находится в верхней части моего стола. Спасибо.

+0

Я подозреваю, что вы просто обходите ноль вокруг контекста управляемого объекта. Инициализирует ли ваш делегат приложения стек Core Data? Вот как контекст получает значение. – bilobatum

+0

Я отредактировал свой вопрос и добавил метод managedObjectContext – Christian

ответ

0

В вашем - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions при использовании раскадровки вам не нужно выделять-инициализировать контроллер вида. Вид контроллера вы устанавливаете контекст не фактическое один отображается как это конкретизируется с помощью раскадровки

Чтобы получить этот контроллер представления, которое инстанцированный из видеоредактора, вы можете сделать:

UINavigationController *navController = self.window.rootViewController; 
MasterViewController *viewController = navController.topViewController; 

После этого вы можете установить контекст по:

viewController.managedObjectContext = self.managedObjectContext; 

Чтобы установить свойство на втором контроллере представления, сделать это в prepareForSegue: первого контроллера представления и получить segue.destinationViewController свойство будет ваш второй контроллер представления и т вы можете установить свойство managedObjectContext этого контроллера вида оттуда

0

Я решил проблему. Я просто изменил метод didFinishLaunchingWithOptions на:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    return YES; 
} 

Чем, я просто назвал мой AppDelegate переменной managedObjectContext в ViewController, в которых я нуждался:

#import "AppDelegate.h" 

.

AppDelegate * appdelegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = appdelegate.managedObjectContext;