2011-12-04 29 views
3

我想獲得AccountUserLinkedAccountFacebook類型,其中AccountUser有許多LinkedAccount(在覈心數據中)。objectsPassingTest:Vs filteredSetUsingPredicate:?

哪個更好用?

  1. 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; 
        } 
    }]; 
    
  2. filteredSetUsingPredicate:

    NSSet *facebookLinkedAccounts = 
    [activeAccountUser.linkedAccounts filteredSetUsingPredicate: 
    [NSPredicate predicateWithFormat:@"type == %i", LinkedAccountTypeFacebook]]; 
    
  3. 執行取經由NSManagedObjectContext請求。

或者,有沒有更好的方法來做到這一點?

回答

2

調用activeAccountUser.linkedAccounts將從核心數據中獲取它們(如果它們是故障的話),假設您建立了關係。

'linkedAccounts'是否有問題?即它是否已經在記憶中?如果是這樣,我會使用(2.)。如果數據仍然在您的後備商店ID執行取得請求與謂詞過濾到您需要的鏈接的帳戶類型(3.)

或者,如果您打算取回所有其他類型,也許它會最好先把它們全部拿回來。

嘗試它們並排運行,並在其上運行Instruments時間分析器。