NSArrayController остается пустым после удаления всех объектов из CoreData - PullRequest
2 голосов
/ 13 февраля 2012

Я использую следующий метод для удаления всех объектов из 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)

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

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

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

1 Ответ

2 голосов
/ 14 февраля 2012

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

...