NSArrayController остается пустым после удаления всех объектов из CoreData

Я использую следующий метод, чтобы удалить все объекты из CoreData:

- (void)removeAllObjects:(id)sender{
    [[self managedObjectContext] lock];
    [[self managedObjectContext] reset];
    NSPersistentStore *store = [[[self persistentStoreCoordinator] persistentStores] lastObject]; 

    if (store)
    {
        NSURL *storeUrl = store.URL;
        NSError *error;

        if ([[self persistentStoreCoordinator] removePersistentStore:store error:&error])
        {
            __persistentStoreCoordinator = nil;
            __managedObjectContext = nil;
            __managedObjectModel = nil;
            NSLog(@"storeUrl %@", storeUrl);


            if (![[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:&error])
            {
                NSLog(@"\nresetDatastore. Error removing file of persistent store: %@",[error localizedDescription]);
            }
            else
            {
                NSLog(@"Recreating");
                //now recreate persistent store
               // [self persistentStoreCoordinator];
                [[self managedObjectContext] unlock];
            }
        }
        else
        {
            NSLog(@"\nresetDatastore. Error removing persistent store: %@", [error localizedDescription]);
        }
    }
    else
    {
        NSLog(@"\nresetDatastore. Could not find the persistent store");
    }
}

Вроде все отлично работает. Удалив все, я снова могу добавлять новые объекты. Но новые объекты не появляются в моем контроллере NSArraycontroller, который привязан к managedObjectContext. После перезапуска приложения все новые объекты находятся в ArrayController (и появляются в моем tableView)

Проверил, не теряются ли как-то привязки, но все правильно.

Что я делаю неправильно? Я должен пропустить кое-что, что происходит при запуске. Но что? о_О

(У меня включен ARC)


person Daniel    schedule 13.02.2012    source источник
comment
Ой, не называй это NSArrayController. NSArray - это тип данных. Controller зарезервирован для ViewController объектов.   -  person Jack Lawrence    schedule 14.02.2012
comment
Эм, но я говорю о NSArrayController. developer.apple.com / library / mac / # documentation / Cocoa / Reference /   -  person Daniel    schedule 14.02.2012


Ответы (1)


Контроллер NSArrayController привязан к managedObjectContext. При сбросе БД вы устанавливаете для managedObjectContext значение nil, а затем назначаете новый managedObjectContext. Короче говоря: вам нужно будет выполнить привязку к новому MOC после сброса.

person Christian Beer    schedule 14.02.2012
comment
Звучит очевидно ^^ [scansArrayController bind:@"managedObjectContext" toObject:self withKeyPath:@"managedObjectContext" options:nil]; Спасибо! - person Daniel; 15.02.2012