NSFetchRequest on a specific store



我开始使用具有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 类型的对象。

现在一切都很完美。

最新更新