问题与CoreData
问题描述:
删除我使用这个代码删除从CoreData的条目:问题与CoreData
NSManagedObjectContext *context2=[self managedObjectContext];
NSFetchRequest *fetch2 = [[NSFetchRequest alloc] init];
NSEntityDescription *entity2=[NSEntityDescription entityForName:@"RecentMovies" inManagedObjectContext:context2];
[fetch2 setEntity:entity2];
[fetch2 setResultType:NSDictionaryResultType];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"DateTime"];
NSExpression *minDateExpression = [NSExpression expressionForFunction:@"min:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"minDateTime"];
[expressionDescription setExpression:minDateExpression];
[expressionDescription setExpressionResultType:NSDateAttributeType];
[fetch2 setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
error=nil;
NSArray *objects2 = [context2 executeFetchRequest:fetch2 error:&error];
if (objects2 == nil) {
// Handle the error.
NSLog(@"ERRORS IN SEARCH INSIDE VIEW SUCCESS");
}
else {
if ([objects2 count] > 0) {
NSLog(@"Minimum date: %@", [[objects2 objectAtIndex:0] valueForKey:@"minDateTime"]);
//delete the oldest entry !
for (NSManagedObject *object2 in objects2) {
[context2 deleteObject:object2];
}
}
}
不过,我收到以下错误:
Minimum date: 2011-08-03 08:32:35 +0000
2011-08-03 03:33:15.014 EncameoApp[1933:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An NSManagedObjectContext cannot delete objects in other contexts.'
任何帮助吗?
我在CoreData中还有2个其他表,并且[self managedObjectContext]在所有CoreData代码之间共享。我在这里对关于上下文的错误信息有点困惑......
答
通常改变你正在迭代的数组是一个坏主意。
for (NSManagedObject *object2 in objects2) {
[context2 deleteObject:object2];
}
不知道你的意思,我没有改变阵列,其中1是对象2,另一种是objects2 ...他们是不一样的名字......:-s – ahsan
对象2是object2中的一个对象,然后继续删除object2,从而更改objects2数组。问题出现在循环中,因为object2被取出而另一个object2取代了它的位置,改变了快速枚举器使用的[objects count]值。 – RickiG
那么你有什么建议? – ahsan