从另一个方法中删除 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
再次阅读您的问题,Section
和Fixture
之间的关系是什么?如果它们是分离的实体,您也应该为 Section
s 执行前面的步骤。
【讨论】:
以上是关于从另一个方法中删除 NSManagedObjectContext 中的对象的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 核心数据 - 在 NSManagedObject 子类中使用删除方法后保存不成功
当另一个模型正在使用该对象时,从核心数据中删除 NSManagedObject
从另一个方法中删除 NSManagedObjectContext 中的对象