Удалить объект Coredata - PullRequest
3 голосов
/ 14 июня 2011

У меня есть проект, который использует coredata, и я пытаюсь удалить из того, что я сохранил.Но я продолжаю получать эту ошибку.

An NSManagedObjectContext cannot delete objects in other contexts.

Я посмотрел на то, что сказал Apple, и из того, что я могу сказать, я правильно понял, но что-то все еще не работает.Какие-либо предложения?Спасибо!

for (UserNumber *info in pinNumberArray) {

        NSSet *time = [[NSSet alloc] initWithSet:info.Times];

        for (ErgTimes *ergTimes in time){

            NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects:ergTimes.Twok, nil];
            NSManagedObject *eventToDelete = [temp objectAtIndex:0];
            [managedObjectContext deleteObject:eventToDelete];
        }
    }  

Ответы [ 2 ]

11 голосов
/ 14 июня 2011

Ну, возможно, вы перепутали свои объекты, контекст и потоки. NSManagedObjectContext не является поточно-ориентированным. Чтобы удалить объект из контекста, вам нужно сначала извлечь объект «в» контекст, и я думаю, что ваш управляемый объект был выбран другим MOC. Не видя больше кода, я не могу сказать.

Однако это относительно легкое исправление. В вашем цикле for, сделайте это вместо

for (ErgTimes *ergTimes in time){
    NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects:ergTimes.Twok, nil];
    NSManagedObject *eventToDelete = [managedObjectContext objectWithID:[[temp objectAtIndex:0] objectID]];
    [managedObjectContext deleteObject:eventToDelete];
}

Для этого нужно получить объект в MOC, который вы используете в данный момент, используя его objectID, который является поточно-ориентированным.

0 голосов
/ 14 июня 2011

Вы должны использовать те же NSManagedObjectContext, которые вы использовали для извлечения объектов, чтобы удалить их.Самое простое решение: использовать managedObjectContext, связанный с каждым объектом, чтобы удалить его.Как это:

for (UserNumber *info in pinNumberArray) {

    NSSet *time = [[NSSet alloc] initWithSet:info.Times];

    for (ErgTimes *ergTimes in time){

        NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects:ergTimes.Twok, nil];
        NSManagedObject *eventToDelete = [temp objectAtIndex:0];
        [eventToDelete.managedObjectContext deleteObject:eventToDelete];
    }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...