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
。也许只是让它成为上面方法的第一行。尝试一下,但没有改变。谢谢你的提示。