我开始使用具有Core Data的多个持久存储。为此,我编写了以下代码:
- (NSUInteger)countEntity:(NSString*)entityName
withPredicate:(NSPredicate*)predicate
onStore:(NSString*)configName
{
NSFetchRequest *request=[[NSFetchRequest alloc] init];
if (predicate) [request setPredicate:predicate];
NSError *error=nil;
[request setEntity:[NSEntityDescription entityForName:entityName
inManagedObjectContext:context]];
[request setAffectedStores:
[NSArray arrayWithObject:[[configurDico objectForKey:configName]
objectForKey:@"store"]]];
NSUInteger count=[context countForFetchRequest:request error:&error]; // PROBLEMATIC LINE.
return count;
}
但是我收到以下消息,在调试器有问题的行上。
2014-12-06 02:56:10.932 TheApp[1501:76002] -[NSURL executeRequest:withContext:error:]: unrecognized selector sent to instance 0x1757df50
我做错了什么?
作为参考,我不得不说以下方法,几乎与上一个方法一样,运行良好:
- (NSUInteger)countEntity:(NSString*)entityName
withPredicate:(NSPredicate*)predicate
{
NSFetchRequest *request=[[NSFetchRequest alloc] init];
if (predicate) [request setPredicate:predicate];
NSError *error=nil;
[request setEntity:[NSEntityDescription entityForName:entityName
inManagedObjectContext:context]];
NSUInteger count=[context countForFetchRequest:request error:&error];
return count;
}
这让我想到,由于这是唯一添加的行,我一定是使用setImpactStores:错误的方式。
您的context
变量的类型错误(NSURL而不是NSManagedObjectContext)。确保正确设置核心数据堆栈。
以防这对某人有帮助。这是我找到的解决方案:
我替换了以下代码:
[request setAffectedStores:
[NSArray arrayWithObject:[[configurDico objectForKey:configName]
objectForKey:@"store"]]];
通过这个其他代码:
NSPersistentStore *theStore=[persistentStoreCoordinator
persistentStoreForURL:[[configurDico objectForKey:configName]
objectForKey:@"store"]];
[request setAffectedStores:[NSArray arrayWithObject:theStore]];
部分:
[[configurDico objectForKey:configName] objectForKey:@"store"]
是与我想使用的存储匹配的 NSURL 类型的对象。
现在一切都很完美。