从另一个方法中删除 NSManagedObjectContext 中的对象

Posted

技术标签:

【中文标题】从另一个方法中删除 NSManagedObjectContext 中的对象【英文标题】:Delete objects from NSManagedObjectContext from another method 【发布时间】:2014-03-25 09:15:27 【问题描述】:

我正在尝试删除所有对象,但似乎无法使其正常工作。我知道这类问题还有其他问题,但它们没有帮助。我想要的是在这个方法中删除部分和夹具实体中的所有对象。

- (void)refresh:(UIRefreshControl *)refreshControl     
    [refreshControl endRefreshing];

这是我用另一种方法保存和获取我的对象的地方。

NSManagedObjectContext *context = [self managedObjectContext];

for (int i=0; i <=fixtures.count-1; i++) 

    fixture = [NSEntityDescription insertNewObjectForEntityForName:@"Fixture" inManagedObjectContext:context];

    [fixture setValue:[NSString stringWithFormat:@"%@",[[fixtures objectAtIndex:i] objectForKey:@"date"]] forKey:@"date"];
    [fixture setValue:[[fixtures objectAtIndex:i] objectForKey:@"time"] forKey:@"time"];
    [fixture setValue:[[fixtures objectAtIndex:i] objectForKey:@"home"] forKey:@"home"];
    [fixture setValue:[[fixtures objectAtIndex:i] objectForKey:@"away"] forKey:@"away"];
    [fixture setValue:[[fixtures objectAtIndex:i] objectForKey:@"league"] forKey:@"league"];


for (int i=0; i <=sections.count-1; i++) 
    lolSection = [NSEntityDescription insertNewObjectForEntityForName:@"Section" inManagedObjectContext:context];
    [lolSection setValue:[NSString stringWithFormat:@"%@",[[sections objectAtIndex:i] objectForKey:@"date"]] forKey:@"date"];


NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Fixture"];
self.theFixtures = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] initWithEntityName:@"Section"];
self.theSection= [[managedObjectContext executeFetchRequest:fetchRequest2 error:nil] mutableCopy];

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];
NSArray* reverseTheArray = [[self.theSection valueForKey:@"date"] sortedArrayUsingDescriptors:descriptors];
reversedArray = [[reverseTheArray reverseObjectEnumerator] allObjects];

【问题讨论】:

【参考方案1】:

那么,到目前为止,您尝试过什么?

根据文档。

删除托管对象很简单。您只需发送它的 托管对象上下文 deleteObject: 消息,传递您的对象 想要删除作为参数。

换句话说,使用你应该说的有效上下文

[aValidContext deleteObject:managedObjectYouWantToDelete];

关于你的问题,你需要

    设置获取请求以获取 Fixture 项目 循环结果(NSArray)并执行删除

例如

NSFetchRequest* request = // create the request here...

NSError *error;
NSArray *array = [aValidContext executeFetchRequest:request error:&error];
if (array == nil) 
    // Deal with error...
 else 
    // loop the array performing deleteObject


// save to persistent store

剩下的代码留作练习;)

编辑 1

再次阅读您的问题,SectionFixture 之间的关系是什么?如果它们是分离的实体,您也应该为 Sections 执行前面的步骤。

【讨论】:

以上是关于从另一个方法中删除 NSManagedObjectContext 中的对象的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 核心数据 - 在 NSManagedObject 子类中使用删除方法后保存不成功

当另一个模型正在使用该对象时,从核心数据中删除 NSManagedObject

从另一个方法中删除 NSManagedObjectContext 中的对象

从另一个数组列表中删除一个数组列表元素的最佳方法

在 commitEditingStyle 中删除 NSManagedObject

NSManagedObject - NSSet 被删除?