【问题标题】:NSFetchRequest on a specific store特定商店上的 NSFetchRequest
【发布时间】:2015-02-04 07:28:28
【问题描述】:

我开始在 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;
}

但我在调试器的 PROBLEMATIC LINE 行收到以下消息。

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;
}

这让我想,既然这是唯一添加的行,我一定是在使用 setAffectedStores: 错误的方式。

【问题讨论】:

    标签: ios core-data persistent-storage


    【解决方案1】:

    您的 context 变量类型错误(NSURL 而不是 NSManagedObjectContext)。确保正确设置核心数据堆栈。

    【讨论】:

    • 使用以下代码声明上下文变量: NSManagedObjectContext *context;最重要的是,发生崩溃的行包含 countForFetchRequest 而不是 executeRequest(错误消息)。这让我很难理解。
    • 您的问题编辑没有帮助。你应该显示你从哪里得到上下文。
    • 这里是获取上下文的代码: context=[self managedObjectContext];换句话说,通常的方式。由于我的问题中的第二种方法有效(如前所述),您可以看到上下文没有问题。
    【解决方案2】:

    如果这可能对某人有帮助。这是我找到的解决方案:

    我替换了这段代码:

    [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 类型的对象,匹配我要使用的商店。

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 2019-06-24
      • 2022-09-27
      • 2011-08-23
      相关资源
      最近更新 更多