suitsArrayは、ボタンが選択された状態のときにオブジェクト(単語)が追加されたMutableArrayです。
次の部分では、suitsCriteriaStringを、単語とsuitsArrayを区切るスペースのみを含むクリーンな文字列 にする必要があります。つまり、コンマやその他の記号は使用しません。(NSSetか何かで?)
NSString *suitsCriteriaString = [NSString stringWithFormat:@"%@", suitsArray];
NSString *wineSuitsString = [wine objectForKey:@"Suits"];
NSRange range = [wineSuitsString rangeOfString:suitsCriteriaString options:NSCaseInsensitiveSearch];
次に、NSRangeは、正しく実行された場合、suitsCriteriaString内の単語がwineSuitsStringに存在するかどうかを確認する必要があります。次に、一致する単語のみを含むように結果をフィルタリングする必要があります。
私の検索機能のコードは次のとおりです。これを機能させるためにさらに情報が必要な場合はお知らせください。
SearchViewController.h
#import <UIKit/UIKit.h>
@interface SearchViewController : UIViewController {
@property (nonatomic, strong) NSMutableArray *allObjectsArray;
@property (nonatomic, strong) NSMutableArray *resultObjectsArray;
@property (nonatomic, strong) NSMutableArray *suitsArray;
@property (nonatomic, retain) IBOutlet UISlider *minPrisSlider;
@property (nonatomic, retain) IBOutlet UISlider *maxPrisSlider;
-(IBAction)searchButtonPressed:(id)sender;
@end
SearchViewController.m:
allObjectsArrayを埋めます:
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Wine.plist"];
allObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
}
SuitsArrayにオブジェクトを追加または削除します。これに似たボタンが10個あります。
-(IBAction)lambButtonPressed:(id)sender
{
if (lambButtonSelected == 0) {
lambButtonSelected = 1;
[suitsArray addObject:@"lamb"];
} else {
lambButtonSelected = 0;
[suitsArray removeObject:@"lamb"];
}
}
次に、検索結果にオブジェクトを追加します。
-(IBAction)searchButtonPressed:(id)sender{
resultObjectsArray = [NSMutableArray array];
for(NSDictionary *wine in allObjectsArray)
{
//String for price
NSString *winePrice = [wine objectForKey:@"Price"];
/*THIS IS WHERE I'M TRYING TO CHECK IF THE WORDS IN suitsCriteriaString
ARE EXISTING IN wineSuitsString */
NSString *suitsCriteriaString = [NSString stringWithFormat:@"%@", suitsArray];
NSString *wineSuitsString = [wine objectForKey:@"Suits"];
NSRange range = [wineSuitsString rangeOfString:suitsCriteriaString options:NSCaseInsensitiveSearch];
//THEN LAST, ADD OBJECTS WITH MATCH OF PRICE CRITERIA AND SUITS CRITERIA TO RESULTS:
BOOL priceConditionGood = YES;
if (minPrisSlider.value <= maxPrisSlider.value && (winePrice.floatValue < minPrisSlider.value || winePrice.floatValue > maxPrisSlider.value))
priceConditionGood = NO;
if (range.location != NSNotFound && priceConditionGood)
[resultObjectsArray addObject:wine];
}
}
//AND PUSH RESULTS CONTROLLER:
ResultsTableViewController *nextController = [[self storyboard] instantiateViewControllerWithIdentifier:@"ResultsController"];
nextController.objectsArray = [[NSMutableArray alloc]initWithArray:resultObjectsArray];
[self.navigationController pushViewController:nextController animated:YES];
}