2015-01-21 116 views
0

我試圖篩選具有對象的數組@property BOOL錯過 根據我定義這個屬性NSPredicate失敗BOOL

的價值:

NSPredicate *missedInvitationsPredicate = [NSPredicate predicateWithBlock: ^BOOL(CRGQuizInvitation* invitation, NSDictionary *bind){ 
    return invitation.missed == YES; 
}]; 

,但它失敗。我嘗試了很多東西,比如使用predicateWithFormat,一個等號和其他許多東西。最後,我通過將BOOL轉換爲NSNumber來解決這個問題,但我仍然想知道這有什麼問題。

+0

你說的 「失敗」 是什麼意思?你有例外嗎?如果你這樣做,請將其添加到問題中。 – 2015-01-21 08:49:16

+0

失敗=沒有得到相應的結果。不會拋出異常。 更具體,塊中的代碼(即,返回invitation.missed == YES;)無論我將其與YES還是NO進行比較都返回false。這是奇怪的事 – 2015-01-21 11:47:28

回答

0

我已經實現了它,但沒有轉換爲NSNumber。這裏是示例代碼。

NSMutableArray *collection = [[NSMutableArray alloc] init]; 

for (int itemIndex = 0; itemIndex < 5; itemIndex++) 
{ 
    CRGQuizInvitation *invitation = [[CRGQuizInvitation alloc] init]; 

    if (itemIndex %2 == 0) 
    { 
    invitation.missed = YES; 
    } 

    [collection addObject:invitation]; 
} 

NSPredicate *missedInvitationsPredicate = [NSPredicate predicateWithBlock: ^BOOL(CRGQuizInvitation* invitation, NSDictionary *bind){ 
    return invitation.missed == YES; 
}]; 

NSArray *trueValueObjCollection = [collection filteredArrayUsingPredicate: missedInvitationsPredicate]; 

NSLog(@"%@", trueValueObjCollection); 

CRGQuizInvitation

@interface CRGQuizInvitation : NSObject 

@property (nonatomic, assign) BOOL missed; 

@end 

輸出日誌

<TestClass: 0x8f1d450> 
<TestClass: 0x8f1e440> 
<TestClass: 0x8f1e460> 
+0

我試過使用[NSPredicate predicateWithFormat:@「anAttribute == YES」];已經失敗了。 我轉換爲NSNumber來解決它,但我想知道我在做什麼錯誤時,直接使用BOOL – 2015-01-21 08:38:18

+0

我已更新我的答案,請檢查它。 – 2015-01-21 08:53:38