Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 删除对象核心数据_Iphone_Objective C_Xcode_Core Data - Fatal编程技术网

Iphone 删除对象核心数据

Iphone 删除对象核心数据,iphone,objective-c,xcode,core-data,Iphone,Objective C,Xcode,Core Data,我有一个使用coredata的项目,我正在尝试删除我存储的内容。但我一直在犯这个错误 An NSManagedObjectContext cannot delete objects in other contexts. 我看了一下苹果公司说的话,从我所能看出我说的是对的,但有些东西仍然不对劲。有什么建议吗?谢谢 for (UserNumber *info in pinNumberArray) { NSSet *time = [[NSSet alloc] initWithSet

我有一个使用coredata的项目,我正在尝试删除我存储的内容。但我一直在犯这个错误

An NSManagedObjectContext cannot delete objects in other contexts.
我看了一下苹果公司说的话,从我所能看出我说的是对的,但有些东西仍然不对劲。有什么建议吗?谢谢

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];
        }
    }  

您必须使用与获取对象以删除对象相同的
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];
    }
}  

嗯,可能是你把对象、上下文和线程搞混了<代码>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];
}

这样做的目的是使用线程安全的objectID获取MOC中当前使用的对象。

当我尝试获取以下错误-[NSCFNumber objectID]:无法识别的选择器发送到实例0xaa004f0。有什么想法吗?哦,我不确定数组中有什么,假设它是一个NSManagedObject(或子类)。您需要从NSManagedObject中获取objectID,并将其作为参数传递给MOC,MOC将返回相同的托管对象,但在当前上下文中,您可以删除该对象。根据您最初的问题,什么是ErgTimes类,它是Twok属性?哦,很抱歉,您只需要调用[managedObjectContext deleteObject:[managedObjectContext objectWithID:[info objectID]];ErgTimes是一个NSManagesObject,TwoK是其中的一个float属性。谢谢你的回答!!我节省了很多时间!!这就是我获取对象的方式,你能看到这有什么问题吗?NSEntityDescription*entity=[NSEntityDescription entityForName:@“UserNumber”在managedObjectContext:managedObjectContext中];NSFetchRequest*request=[[NSFetchRequest alloc]init];[请求集合实体:实体];NSSortDescriptor*pinNumbers=[[NSSortDescriptor alloc]initWithKey:@“PIN”升序:否];NSArray*sortDescriptors=[NSArray arrayWithObject:pinNumbers];[请求集合描述符:排序描述符];NSMutableArray*mutableFetchResults=[[managedObjectContext executeFetchRequest:请求错误:&错误]mutableCopy];