-1

MyContact というカスタマイズされたオブジェクトがあります。内部には 2 つのパラメーターがあり、1 つは name(NSString)、もう 1 つは phoneArray(NSArray) です。MyContact 配列を生成し、「phoneArray を含む %@」で NSPredicate を使用してフィルター処理を行ったところ、空の結果が得られましたが、「name を含む %@」を使用してフィルター処理を行うと、正しい結果が得られます。理由はわかりません。以下は私のデモコードです!

@interface MyContact : NSObject

@property (nonatomic, retain) NSString *name;

@property (nonatomic, retain) NSArray *phoneArray;

@end

@autoreleasepool {

    NSMutableArray *myContacts = [[NSMutableArray alloc] init];

    MyContact *contact1 = [[MyContact alloc] init];
    contact1.name = @"will mo";
    contact1.phoneArray = [NSArray arrayWithObjects:@"138761", nil];
    [myContacts addObject:contact1];
    [contact1 release];

    MyContact *contact2 = [[MyContact alloc] init];
    contact2.name = @"robert jiang";
    contact2.phoneArray = [NSArray arrayWithObjects:@"13554227",   @"876368268", nil];
    [myContacts addObject:contact2];
    [contact2 release];

    MyContact *contact3 = [[MyContact alloc] init];
    contact3.name = @"watson song";
    contact3.phoneArray = [NSArray arrayWithObjects:@"73514637", @"6216738", nil];
    [myContacts addObject:contact3];
    [contact3 release];

    MyContact *contact4 = [[MyContact alloc] init];
    contact4.name = @"marco sch";
    contact4.phoneArray = [NSArray arrayWithObjects:@"42437845", nil];
    [myContacts addObject:contact4];
    [contact4 release];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"phone contains %@", @"24"];
    NSArray *resultArray = [myContacts filteredArrayUsingPredicate:predicate];
    NSLog(@"%@", resultArray);

    [myContacts release];
}
4

1 に答える 1

1

「phoneArray」は文字列の配列です。配列要素のいずれかに指定された文字列が含まれているかどうかを確認するには、次を使用します。

[NSPredicate predicateWithFormat:@"ANY phoneArray CONTAINS %@", @"24"];
于 2013-07-07T14:10:40.497 に答える