0

質問が古くなっていることは承知しています。より良い言い方が見つからなかったので、私が苦労している質問を時間をかけて説明します。

ユーザーからの入力を受け取るiPhoneアプリがあります。そして、plistを取得しました(すぐにオンラインデータベースに変換します)。現在行っていることはこれです。入力文字列を plist の項目の成分部分と比較します。

これは plist 形式です

<array>
    <dict>
        <key>category</key>
        <string>desert</string>
        <key>numberOfPerson</key>
        <string>3</string>
        <key>recipeImage</key>
        <string>asd.jpg</string>
        <key>time</key>
        <string>15</string>
        <key>recipeName</key>
        <string>Puding</string>
        <key>recipeDetail</key>

入力をrecipeIngredientsと比較しますが、コードが行うことは私が必要とするものではありません.比較が真になった場合、入力成分を含むplistからすべての項目をリストするだけです.選択したレシピをフィルタリングできますが、私が欲しいのはこれです:入力と材料が完全に一致しない限り、表示したくありません。

問題はこれです。レシピの材料は、砂糖大さじ1、塩大さじ1、鶏肉100gです。

ユーザーは、塩、砂糖などの入力を入力します。鶏肉なので完全に比較することはできません。同じになることはないので、何も表示できません。

どうすればこれを達成できますか。

あらゆる種類の提案を受け付けています。

これが私が比較する方法です

    results = [arrayOfPlist filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        NSDictionary *_dataRow = (NSDictionary *)evaluatedObject;
        return ([[[_dataRow valueForKey:@"recipeIngredients"] lowercaseString] rangeOfString:[searchText lowercaseString]].location != NSNotFound);
    }]];

searchText は私の入力です。

4

4 に答える 4

1

まず第一に、ユーザー入力にタイプミスがあるかどうかはわかりません。

しかし、できることは、2 つの文字列を比較する前に、特定の文字セットを少しトリミングすることです。NSStringと呼ばれるクラスにメソッドがあります:

- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set

を取り除きたい場合。または - 文字、文字セットで指定する必要があります。それより、2 つの文字列を比較できます。

于 2014-04-25T21:55:33.830 に答える
0

以下のコードは、「材料に砂糖が含まれ、材料にチョコレートが含まれている」という述語を作成します。

NSArray*        recipes = @[
                            @{@"recipeIngredients": @"sugar flour chocolate"},
                            @{@"recipeIngredients": @"sugar chocolate"},
                            @{@"recipeIngredients": @"flour chocolate"},
                            @{@"recipeIngredients": @"chocolate"},
                            ];
NSString*       search = @"sugar, chocolate";

// split the ingredients we have into an array of strings separated by ',' or ' '
NSArray*        haves = [search componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];

// Build a list of recipeIngredients CONTAINS have
NSMutableArray* ands = [NSMutableArray new];
for(NSString* have in haves)
{
    if(have.length > 0)
    {
        [ands addObject:[NSPredicate predicateWithFormat:@"recipeIngredients CONTAINS[cd] %@", have]];
    }
}

// String all the haves into a single long ... AND ... AND ... predicate    
NSPredicate*    predicate = [NSCompoundPredicate andPredicateWithSubpredicates:ands];

// Apply the predicate
NSArray*        filtered = [recipes filteredArrayUsingPredicate:predicate];
于 2014-04-25T22:16:16.943 に答える