我想获得 AccountUserlinkedAccount 类型 LinkedAccountFacebook ,其中 AccountUser 有很多 LinkedAccount 的(在核心数据中)。

哪个更好用?

  • objectsWithOptions:passingTest:
    NSSet *facebookLinkedAccounts =
    [activeAccountUser.linkedAccounts objectsWithOptions:NSEnumerationConcurrent passingTest:^BOOL(id obj, BOOL *stop) {
        if ([(LinkedAccount *)obj hasType:LinkedAccountTypeFacebook]) {
            *stop = YES;
            return YES;
        } else {
            return NO;
        }
    }];
    
  • filteredSetUsingPredicate:
    NSSet *facebookLinkedAccounts =
    [activeAccountUser.linkedAccounts filteredSetUsingPredicate:
     [NSPredicate predicateWithFormat:@"type == %i", LinkedAccountTypeFacebook]];
    
  • 通过 NSManagedObjectContext 执行获取请求。

  • 或者,有没有更好的方法来做到这一点?

    最佳答案

    调用 activeAccountUser.linkedAccounts 将从核心数据中获取它们(如果它们是错误的),假设您已经建立了关系。

    “linkedAccounts”是错的吗?即它是否已经在内存中?如果是这样,我会使用 (2.)。如果数据仍在您的后备存储 id 中,请执行带有谓词过滤的 fetch 请求到您需要的链接帐户类型 (3.)

    或者,如果您打算无论如何都要获取所有其他类型,也许最好先获取它们。

    并排尝试它们并在它们上运行 Instruments 时间分析器。

    关于objective-c - objectsPassingTest : Vs filteredSetUsingPredicate:?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8372953/

    10-14 20:47