Ios 核心数据:executeFetchRequest:错误:返回没有managedObjectContext的对象

Ios 核心数据:executeFetchRequest:错误:返回没有managedObjectContext的对象,ios,core-data,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobjectcontext,我遇到了一个问题,NSManagedObjectContext的executeFetchRequest:error:正在返回未插入上下文的NSManagedObjects数组 我的方法: - (NSArray *)deleteAllObjectsWithEntityName:(NSString *)entityName { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescripti

我遇到了一个问题,
NSManagedObjectContext
executeFetchRequest:error:
正在返回未插入上下文的
NSManagedObjects
数组

我的方法:

- (NSArray *)deleteAllObjectsWithEntityName:(NSString *)entityName {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];
    fetchRequest.entity = entityDesc;
    NSError *error = nil;
    NSArray *managedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

    // [[self.managedObjectContext registeredObjects] count] : 0
    // [[self.managedObjectContext insertedObjects] count] : 0
    //
    // managedObjects.count : 1
    // error : nil
    //
    // managedObjects[0] : <Foo: 0xe98c1d0>
    // managedObjects[0].isDeleted : NO
    // managedObjects[0].isFault : NO
    // managedObjects[0].isInserted : NO
    // managedObjects[0].managedObjectContext : nil
    //
    // [NSThread isMainThread] : YES
    //
    // self.managedObjectContext : <NSManagedObjectContext: 0xe97d840>
    //

    for (NSManagedObject *anObject in managedObjects) {
        [self.managedObjectContext deleteObject:managedObject];
    }

    [self.managedObjectContext save:&error];

    // error : Error Domain=NSCocoaErrorDomain Code=134030 \
    // "The operation couldn’t be completed. (Cocoa error 134030.)" UserInfo=0x8b6d260 \
    // {NSAffectedObjectsErrorKey=(
    //     "<Foo: 0x10464910> (entity: Foo; id: 0x10464950 <x-coredata:///Job/tE5188F9B-9DC4-4EA2-8636-7790587E114F242> ; data: {...})"
    // ), \
    // NSUnderlyingException=Cannot update object that was never inserted.},
}
-(NSArray*)deleteAllObjectsWithEntityName:(NSString*)entityName{
NSFetchRequest*fetchRequest=[[NSFetchRequest alloc]init];
NSEntityDescription*EntityDescription=[NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity=entityDesc;
n错误*错误=nil;
NSArray*managedObjects=[self.managedObjectContext executeFetchRequest:fetchRequest错误:&error];
//[[self.managedObjectContext registeredObjects]计数]:0
//[[self.managedObjectContext insertedObjects]计数]:0
//
//managedObjects.count:1
//错误:无
//
//ManagedObject[0]:
//managedObjects[0]。已删除:否
//managedObjects[0]。isFault:否
//managedObjects[0]。已插入:否
//managedObjects[0]。managedObjectContext:无
//
//[NSThread isMainThread]:是
//
//self.managedObjectContext:
//
用于(NSManagedObject*ManagedObject中的一个对象){
[self.managedObjectContext deleteObject:managedObject];
}
[self.managedObjectContext保存:&错误];
//错误:错误域=NSCOCAERRORDOMAIN代码=134030\
//“操作无法完成。(Cocoa错误134030)。”UserInfo=0x8b6d260\
//{NSAffectedObjectsErrorKey=(
//“(实体:Foo;id:0x10464950;数据:{…})”
// ), \
//NSUnderlyingException=无法更新从未插入的对象。},
}
我已经验证了总是在主线程上创建
self.managedObjectContext

根据,对象会自动注册到fetching managedObjectContext,因此我发现
registeredObjects
返回一个空集是可疑的


我被难住了,所以我希望有人能发现我的代码有问题,或者知道我错过了什么

这是删除托管对象并保存其上下文后更新托管对象的症状

我在视图控制器中保留了对Foo实例的引用。我从托管对象上下文中删除了所有Foo对象,然后更新了Foo实例,然后再次尝试删除所有Foo对象


这个问题帮助我找到了原因:。

你说的没有插入上下文是什么意思?我的意思是所有对象都有一个nil managedObjectContext。我不确定它是否有用,但是我会在插入相关对象之后,在运行上面的代码之前,尝试在托管对象上下文上调用
processPendingChanges
。也许只是让它成为上面方法的第一行。尝试一下,但没有改变。谢谢你的提示。