我想創建一個fetchRequest顯示我已經不在另一個數組的所有值。此代碼返回我期望的數組:謂詞適用於數組,但不是fetchRequest
NSArray *questionChoices = [self.currentQuestionChoiceGroup.questionChoices allObjects];
NSArray *filteredQuestionChoices = [questionChoices filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"NONE %@ == code", myarr]];
myarr包含1個項目,並且1個項目從篩選結果中排除,如預期的那樣。但是,此代碼不工作:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"QuestionChoice" inManagedObjectContext:self.managedObjectContext];
request.predicate = [NSPredicate predicateWithFormat:@"NONE %@ == code AND questionChoiceGroup == %@", myarr, self.currentQuestionChoiceGroup];
當我執行這個讀取請求時,我得到屬於當前questionChoiceGroup所有questionChoices,包括有在myArr,該代碼的人。這似乎完全忽略和語句的第一部分。
我看不出兩者之間應該導致不同結果的任何區別。誰能幫忙?
編輯簡單的解釋:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"questionChoiceGroup == %@ AND NONE %@ == code", self.currentQuestionChoiceGroup, [NSArray arrayWithObject:@"A"]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"displayOrder" ascending:YES]];
request.entity = [NSEntityDescription entityForName:@"QuestionChoice" inManagedObjectContext:self.managedObjectContext];
request.predicate = predicate;
NSArray *filteredQuestionChoices1 = [self.managedObjectContext executeFetchRequest:request error:nil];
NSLog(@"my filtered question choices 1: %@", [filteredQuestionChoices1 valueForKey:@"code"]);
NSArray *filteredQuestionChoices2 = [filteredQuestionChoices1 filteredArrayUsingPredicate:predicate];
NSLog(@"my filtered question choices 2: %@", [filteredQuestionChoices2 valueForKey:@"code"]);
filteredQuestionChoices1包含 「A」 的代碼的項目。 filteredQuestionChoices2沒有該項目。第二個謂語如何過濾掉任何東西,第一個謂語沒有過濾掉?這兩個語句使用完全相同的斷言。爲什麼我從fetchedRequest獲取對象,如果在數組上使用謂詞時,完全相同的謂詞會將這些對象過濾掉?
只是去嘗試了;它不會改變任何東西......儘管它確實使代碼變得更清晰。 – GendoIkari 2011-03-01 22:55:25
使用%K作爲動態屬性名稱的格式說明符。我已更新我的示例。 – 2011-03-01 22:58:23
我不是一個比較動態屬性名稱...'NONE%@ == code'是爲了消除具有由%@通過在陣列中的代碼的所有項目... – GendoIkari 2011-03-02 17:36:57