У меня есть NSArray, содержащий объекты NSDictionary.Фильтрация NSArray с предикатом оставляет дополнительный результат?
Мне нужно отфильтровать объекты на основе выбора значений, поэтому я создал массив значений, которые я хочу фильтровать и используя предикат с форматом и подавать ему массив объектов.
Это своего рода работа, но странно в ситуациях, когда я знаю, что я должен получать пустой массив. Я получаю один объект, которого не должно быть.
Я выписал значение массива значений фильтра, и я ясно вижу, что он содержит ключ, который соответствует id_str объекта, поэтому его не следует возвращать.
Ниже приведен код, который я использую, любые указатели, в которых я ошибаюсь, были бы очень полезными!
//Create new fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//Set new predicate to only fetch tweets that have been favourited
NSPredicate *filterFavourite = [NSPredicate predicateWithFormat:@"favouriteTweet == 'YES'"];
//Setup the Request
[request setEntity:[NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:_managedObjectContext]];
//Assign the predicate to the fetch request
[request setPredicate:filterFavourite];
NSError *error = nil;
//Create an array from the returned objects
NSArray *favouriteTweets = [_managedObjectContext executeFetchRequest:request error:&error];
NSAssert2(favouriteTweets != nil && error == nil, @"Error fetching events: %@\n%@", [error localizedDescription], [error userInfo]);
//Create a new array containing just the tweet ID's we are looking for
NSArray *favouriteTweetsID = [favouriteTweets valueForKey:@"tweetID"];
NSLog(@"%@", favouriteTweetsID);
//Create a new predicate which will take our array of tweet ID's
NSPredicate *filterFavouritsearchPredicate = [NSPredicate predicateWithFormat:@"(id_str != %@)" argumentArray:favouriteTweetsID];
//Filter our array of tweet dictionary objects using the array of tweet id's we created
NSArray *filteredTweets = [self.timelineStatuses filteredArrayUsingPredicate:filterFavouritsearchPredicate];
//Send those tweets out to be processed and added to core data
[self processNewTweets:filteredTweets];
NSLog(@"Update Favoutited Tweets: %@", filteredTweets);
Можете ли вы также отправить вывод 'NSLog'? И как он отклоняется от того, что вы ожидаете увидеть? –
Вы уверены, что в строках нет ведущих/конечных пробелов? – Wain