1

にテキストが含まれている場合、これは正常に機能textFieldします。ただし、textFieldが空の場合、オブジェクトは追加されません。

このコードに、textFieldが空の場合、すべてのオブジェクトを追加する必要があることを伝える方法はresultObjectsArray

resultObjectsArray = [NSMutableArray array];
for(NSDictionary *object in allObjectsArray)
{

    NSString *nameString = [NSString stringWithFormat:@"%@", [textField text]];
    NSString *wineName = [wine objectForKey:@"Name"];
    NSRange range = [wineName rangeOfString:nameString options:NSCaseInsensitiveSearch];

    if ((range.location != NSNotFound))
        [resultObjectsArray addObject:object];
}
4

2 に答える 2

2
resultObjectsArray = [NSMutableArray array];
NSString *nameString = [textField text];
for(NSDictionary *object in allObjectsArray)
{
    if ([nameString length] > 0)
    {
        NSString *wineName = [wine objectForKey:@"Name"];
        NSRange range = [wineName rangeOfString:nameString options:NSCaseInsensitiveSearch];
        if ((range.location != NSNotFound))
            [resultObjectsArray addObject:object];
    }
    else
    {
        [resultObjectsArray addObject:object];
    }
}

必要ないことに注意してください:

NSString *nameString = [NSString stringWithFormat:@"%@", [textField text]];

なので

NSString *nameString = [textField text];

十分なものです。また、ループ内では変更されないforため、ループ外で初期化できます。

于 2012-08-21T11:48:22.480 に答える
0

このようにして、コードは@trojanfoeからの回答を使用するようになりました。(他の検索条件を除外しました)。

-(IBAction)searchButtonPressed:(id)sender{  

BOOL textFieldIsEdited = NO;
if ([[textField text] length] > 0)
{
textFieldIsEdited = YES;
}

resultObjectsArray = [NSMutableArray array];
for(NSDictionary *wine in allObjectsArray)
{

    BOOL nameMatch = YES;
    if (textFieldIsEdited) {
        NSString *wineName = [wine objectForKey:@"Name"];
        NSString *nameString = [textField text];
        NSRange range = [wineName rangeOfString:nameString options:NSCaseInsensitiveSearch];
        if (range.location == NSNotFound) {
            nameMatch = NO;
        }
    }

    if ((nameMatch != NO))
        [resultObjectsArray addObject:wine];
}
于 2012-08-21T13:35:38.840 に答える